From 713dcf178a40113fba8b4c2b8251dfa45bb26c21 Mon Sep 17 00:00:00 2001 From: pateljannat Date: Fri, 21 May 2021 21:40:31 +0530 Subject: [PATCH] refactor: patches to fix data, profile dashboard, lms mentor mapping page fixes --- community/community/widgets/Avatar.html | 22 +- community/lms/doctype/lms_batch/lms_batch.py | 28 +-- .../lms_batch_membership.py | 21 +- .../lms/doctype/lms_course/lms_course.py | 29 +-- .../lms_mentor_request/lms_mentor_request.py | 33 ++- .../lms/doctype/lms_message/lms_message.json | 2 +- .../lms/doctype/lms_message/lms_message.py | 172 +++++++-------- community/patches.txt | 2 + ...replace_member_with_user_in_lms_message.py | 10 + ...lace_member_with_user_in_mentor_request.py | 10 + community/public/css/style.css | 7 +- community/templates/message.html | 13 ++ community/www/batch/discuss.js | 2 +- community/www/batch/discuss.py | 5 +- community/www/batch/members.html | 33 ++- community/www/batch/members.py | 3 - community/www/batch/utils.py | 19 +- community/www/courses/utils.py | 49 ----- community/www/dashboard/index.html | 16 +- community/www/dashboard/index.py | 7 +- community/www/macros/profile.html | 10 + community/www/profiles/profile.html | 195 ++++++++---------- community/www/profiles/profile.py | 12 +- 23 files changed, 314 insertions(+), 386 deletions(-) create mode 100644 community/patches/replace_member_with_user_in_lms_message.py create mode 100644 community/patches/replace_member_with_user_in_mentor_request.py create mode 100644 community/templates/message.html create mode 100644 community/www/macros/profile.html diff --git a/community/community/widgets/Avatar.html b/community/community/widgets/Avatar.html index 6ef6ed6d..cd4148c9 100644 --- a/community/community/widgets/Avatar.html +++ b/community/community/widgets/Avatar.html @@ -1,14 +1,14 @@ {% set color = member.get_palette() %} - - {% if member.user_image %} - - - {% else %} - - {{ frappe.utils.get_abbr(member.full_name) }} + + {% if member.user_image %} + + + {% else %} + + {{ frappe.utils.get_abbr(member.full_name) }} + + {% endif %} - {% endif %} - - + diff --git a/community/lms/doctype/lms_batch/lms_batch.py b/community/lms/doctype/lms_batch/lms_batch.py index 192df15f..5deb770f 100644 --- a/community/lms/doctype/lms_batch/lms_batch.py +++ b/community/lms/doctype/lms_batch/lms_batch.py @@ -5,7 +5,6 @@ from __future__ import unicode_literals import frappe from frappe.model.document import Document -from community.www.courses.utils import get_member_with_email from frappe import _ from community.lms.doctype.lms_batch_membership.lms_batch_membership import create_membership from community.query import find, find_all @@ -59,30 +58,23 @@ class LMSBatch(Document): {"batch": self.name, "member_type": "Student"}, ["member"]) member_names = [m['member'] for m in memberships] - members = frappe.get_all( - "Users", - {"email": ["IN", member_names]}, - ["email", "full_name", "username"]) - return members + return find_all("User", name=["IN", member_names]) - -@frappe.whitelist() -def get_messages(batch): - messages = frappe.get_all("LMS Message", {"batch": batch}, ["*"], order_by="creation") - for message in messages: - message.message = frappe.utils.md_to_html(message.message) - member_email = frappe.db.get_value("Community Member", message.author, ["email"]) - if member_email == frappe.session.user: - message.author_name = "You" - message.is_author = True - return messages + def get_messages(self): + messages = frappe.get_all("LMS Message", {"batch": self.name}, ["*"], order_by="creation") + for message in messages: + message.message = frappe.utils.md_to_html(message.message) + if message.author == frappe.session.user: + message.author_name = "You" + message.is_author = True + return messages @frappe.whitelist() def save_message(message, batch): doc = frappe.get_doc({ "doctype": "LMS Message", "batch": batch, - "author": get_member_with_email(), + "author": frappe.session.user, "message": message }) doc.save(ignore_permissions=True) 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 1e0976c6..ee98c743 100644 --- a/community/lms/doctype/lms_batch_membership/lms_batch_membership.py +++ b/community/lms/doctype/lms_batch_membership/lms_batch_membership.py @@ -14,18 +14,31 @@ class LMSBatchMembership(Document): self.validate_membership_in_different_batch_same_course() def validate_membership_in_same_batch(self): - previous_membership = frappe.db.get_value("LMS Batch Membership", {"member": self.member, "batch": self.batch, "name": ["!=", self.name]}, ["member_type","member"], as_dict=1) + previous_membership = frappe.db.get_value("LMS Batch Membership", + filters={ + "member": self.member, + "batch": self.batch, "name": ["!=", self.name] + }, + fieldname=["member_type","member"], + as_dict=1) + if previous_membership: - member_name = frappe.db.get_value("Community Member", self.member, "full_name") + member_name = frappe.db.get_value("User", self.member, "full_name") frappe.throw(_("{0} is already a {1} of {2}").format(member_name, previous_membership.member_type, self.batch)) 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", {"member": self.member}, ["batch", "member_type"]) + previous_membership = frappe.get_all("LMS Batch Membership", + filters={ + "member": self.member + }, + fieldname=["batch", "member_type"] + ) + 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("Community Member", self.member, "full_name") + 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)) def create_membership(batch, member=None, member_type="Student", role="Member"): diff --git a/community/lms/doctype/lms_course/lms_course.py b/community/lms/doctype/lms_course/lms_course.py index 9e1f87cd..a313ff74 100644 --- a/community/lms/doctype/lms_course/lms_course.py +++ b/community/lms/doctype/lms_course/lms_course.py @@ -41,21 +41,9 @@ class LMSCourse(Document): if not email or email == "Guest": return False - member = self.get_community_member(email) - if not member: - return False - - mapping = frappe.get_all("LMS Course Mentor Mapping", {"course": self.name, "mentor": member}) + mapping = frappe.get_all("LMS Course Mentor Mapping", {"course": self.name, "mentor": email}) return mapping != [] - def get_community_member(self, email): - """Returns the name of Community Member document for a give user. - """ - try: - return frappe.db.get_value("Community Member", {"email": email}, "name") - except frappe.DoesNotExistError: - return None - def add_mentor(self, email): """Adds a new mentor to the course. """ @@ -68,14 +56,10 @@ class LMSCourse(Document): if self.has_mentor(email): return - member = self.get_community_member(email) - if not member: - return False - doc = frappe.get_doc({ "doctype": "LMS Course Mentor Mapping", "course": self.name, - "mentor": member + "mentor": email }) doc.insert() @@ -96,11 +80,10 @@ class LMSCourse(Document): """ if not email: return False - member = self.get_community_member(email) return frappe.db.exists({ "doctype": "LMS Course Mentor Mapping", "course": self.name, - "mentor": member + "mentor": email }) def get_student_batch(self, email): @@ -110,11 +93,10 @@ class LMSCourse(Document): """ if not email: return False - member = self.get_community_member(email) result = frappe.db.get_all( "LMS Batch Membership", filters={ - "member": member, + "member": email, "member_type": "Student", }, fields=['batch'] @@ -148,10 +130,9 @@ class LMSCourse(Document): batches = find_all("LMS Batch", course=self.name) if mentor: # TODO: optimize this - member = self.get_community_member(email=mentor) memberships = frappe.db.get_all( "LMS Batch Membership", - {"member": member}, + {"member": mentor}, ["batch"]) batch_names = {m.batch for m in memberships} return [b for b in batches if b.name in batch_names] diff --git a/community/lms/doctype/lms_mentor_request/lms_mentor_request.py b/community/lms/doctype/lms_mentor_request/lms_mentor_request.py index d9162bdf..08e514e4 100644 --- a/community/lms/doctype/lms_mentor_request/lms_mentor_request.py +++ b/community/lms/doctype/lms_mentor_request/lms_mentor_request.py @@ -25,7 +25,7 @@ class LMSMentorRequest(Document): }) mapping.save() - def send_creation_email(self, member): + def send_creation_email(self): email_template = self.get_email_template('mentor_request_creation') if not email_template: return @@ -33,7 +33,7 @@ class LMSMentorRequest(Document): course_details = frappe.db.get_value("LMS Course", self.course, ["owner", "slug", "title"], as_dict=True) message = frappe.render_template(email_template.response, { - 'member_name': member.full_name, + 'member_name': frappe.db.get_value("User", frappe.session.user, "full_name"), 'course_url': '/courses/' + course_details.slug, 'course': course_details.title }) @@ -59,12 +59,10 @@ class LMSMentorRequest(Document): 'course': course_details.title }) - member_email = frappe.db.get_value("Community Member", self.member, "email") if self.status == 'Approved' or self.status == 'Rejected': - reviewed_by = frappe.db.get_value('Community Member', self.reviewed_by, 'email') email_args = { - "recipients": member_email, - "cc": [course_details.owner, reviewed_by], + "recipients": self.member, + "cc": [course_details.owner, self.reviewed_by], "subject": email_template.subject, "header": email_template.subject, "message": message @@ -73,7 +71,7 @@ class LMSMentorRequest(Document): elif self.status == 'Withdrawn': email_args = { - "recipients": [member_email, course_details.owner], + "recipients": [self.member, course_details.owner], "subject": email_template.subject, "header": email_template.subject, "message": message @@ -89,7 +87,7 @@ class LMSMentorRequest(Document): def has_requested(course): return frappe.db.count('LMS Mentor Request', filters = { - 'member': get_member().name, + 'member': frappe.session.user, 'course': course, 'status': ['in', ('Pending', 'Approved')] } @@ -98,15 +96,14 @@ def has_requested(course): @frappe.whitelist() def create_request(course): if not has_requested(course): - member = get_member() request = frappe.get_doc({ 'doctype': 'LMS Mentor Request', - 'member': member.name, + 'member': frappe.session.user, 'course': course, 'status': 'Pending' }) request.save(ignore_permissions=True) - request.send_creation_email(member) + request.send_creation_email() return 'OK' else: @@ -114,13 +111,13 @@ def create_request(course): @frappe.whitelist() def cancel_request(course): - request = frappe.get_doc('LMS Mentor Request', {'member': get_member().name, 'course': course, 'status': ['in', ('Pending', 'Approved')]}) + request = frappe.get_doc('LMS Mentor Request', + filters={ + 'member': frappe.session.user, + 'course': course, + 'status': ['in', ('Pending', 'Approved')] + } + ) request.status = 'Withdrawn' request.save(ignore_permissions=True) return 'OK' - -def get_member(): - try: - return frappe.get_doc('Community Member', {'email': frappe.session.user}) - except frappe.DoesNotExistError: - return diff --git a/community/lms/doctype/lms_message/lms_message.json b/community/lms/doctype/lms_message/lms_message.json index b4fc2319..f4acfc11 100644 --- a/community/lms/doctype/lms_message/lms_message.json +++ b/community/lms/doctype/lms_message/lms_message.json @@ -82,4 +82,4 @@ "sort_order": "DESC", "title_field": "author", "track_changes": 1 -} \ No newline at end of file +} diff --git a/community/lms/doctype/lms_message/lms_message.py b/community/lms/doctype/lms_message/lms_message.py index c3b2d012..fb491880 100644 --- a/community/lms/doctype/lms_message/lms_message.py +++ b/community/lms/doctype/lms_message/lms_message.py @@ -7,98 +7,100 @@ import frappe from frappe.model.document import Document from frappe import _ from frappe.utils import add_days, nowdate -from community.www.courses.utils import get_batch_members class LMSMessage(Document): - """ def after_insert(self): - self.send_email() """ + """ def after_insert(self): + Todo: Adding email preference field for users + self.send_email() """ + + def send_email(self): + membership = frappe.get_all("LMS Batch Membership", {"batch": self.batch}, ["member"]) + for entry in membership: + member = frappe.get_doc("User", entry.member) + if member.name != self.author: + frappe.sendmail( + recipients = member.email, + subject = _("New Message on ") + self.batch, + header = _("New Message on ") + self.batch, + template = "lms_message", + args = { + "author": self.author, + "message": frappe.utils.md_to_html(self.message), + "creation": frappe.utils.format_datetime(self.creation, "medium"), + "course": frappe.db.get_value("LMS Batch", self.batch, ["course"]) + } + ) - def send_email(self): - membership = frappe.get_all("LMS Batch Membership", {"batch": self.batch}, ["member"]) - for entry in membership: - member = frappe.get_doc("Community Member", entry.member) - if member.name != self.author and member.email_preference == "Email on every Message": - frappe.sendmail( - recipients = member.email, - subject = _("New Message on ") + self.batch, - header = _("New Message on ") + self.batch, - template = "lms_message", - args = { - "author": self.author, - "message": frappe.utils.md_to_html(self.message), - "creation": frappe.utils.format_datetime(self.creation, "medium"), - "course": frappe.db.get_value("LMS Batch", self.batch, ["course"]) - } - ) def send_daily_digest(): - emails = frappe._dict() - messages = frappe.get_all("LMS Message", {"creation": [">=", add_days(nowdate(), -1)]}, ["message", "batch", "author", "creation"]) - for message in messages: - membership = frappe.get_all("LMS Batch Membership", {"batch": message.batch}, ["member"]) - for entry in membership: - member = frappe.db.get_value("Community Member", entry.member, ["name", "email_preference", "email"], as_dict=1) - if member.name != message.author and member.email_preference == "One Digest Mail per day": - if member.name in emails.keys(): - emails[member.name]["messages"].append(message) - else: - emails[member.name] = frappe._dict({ - "email": member.email, - "messages": [message] - }) - for email in emails: - group_by_batch = frappe._dict() - for message in emails[email]["messages"]: - if message.batch in group_by_batch.keys(): - group_by_batch[message.batch].append(message) - else: - group_by_batch[message.batch] = [message] - frappe.sendmail( - recipients = frappe.db.get_value("Community Member", email, "email"), - subject = _("Message Digest"), - header = _("Message Digest"), - template = "lms_daily_digest", - args = { - "batches": group_by_batch - }, - delayed = False - ) + #Todo: Optimize this + emails = frappe._dict() + messages = frappe.get_all("LMS Message", {"creation": [">=", add_days(nowdate(), -1)]}, ["message", "batch", "author", "creation"]) + for message in messages: + membership = frappe.get_all("LMS Batch Membership", {"batch": message.batch}, ["member"]) + for entry in membership: + member = frappe.db.get_value("User", entry.member, ["name", "email"], as_dict=1) + if member.name != message.author: + if member.name in emails.keys(): + emails[member.name]["messages"].append(message) + else: + emails[member.name] = frappe._dict({ + "email": member.email, + "messages": [message] + }) + for email in emails: + group_by_batch = frappe._dict() + for message in emails[email]["messages"]: + if message.batch in group_by_batch.keys(): + group_by_batch[message.batch].append(message) + else: + group_by_batch[message.batch] = [message] + frappe.sendmail( + recipients = frappe.db.get_value("User", email, "email"), + subject = _("Message Digest"), + header = _("Message Digest"), + template = "lms_daily_digest", + args = { + "batches": group_by_batch + }, + delayed = False + ) def publish_message(doc, method): - email = frappe.db.get_value("Community Member", doc.author, "email") - template = get_message_template() - message = frappe._dict() - message.author_name = doc.author_name - message.message_time = frappe.utils.pretty_date(doc.creation) - message.message = frappe.utils.md_to_html(doc.message) + template = get_message_template() + message = frappe._dict({ + "author_name": doc.author_name, + "message_time": frappe.utils.pretty_date(doc.creation), + "message": frappe.utils.md_to_html(doc.message) + }) - js = """ - $(".msger-input").val(""); - var template = `{0}`; - var message = {1}; - var session_user = ("{2}" == frappe.session.user) ? true : false; - message.author_name = session_user ? "You" : message.author_name - message.is_author = session_user; - template = frappe.render_template(template, {{ - "message": message - }}) - $(".message-section").append(template); - """.format(template, message, email) + js = """ + $(".msger-input").val(""); + var template = `{0}`; + var message = {1}; + var session_user = ("{2}" == frappe.session.user) ? true : false; + message.author_name = session_user ? "You" : message.author_name + message.is_author = session_user; + template = frappe.render_template(template, {{ + "message": message + }}) + $(".message-section").append(template); + """.format(template, message, doc.owner) - frappe.publish_realtime(event="eval_js", message=js, after_commit=True) + frappe.publish_realtime(event="eval_js", message=js, after_commit=True) def get_message_template(): - return """ -
-
-
- {{ message.author_name }} -
-
- {{ message.message_time }} -
-
-
- {{ message.message }} -
-
- """ \ No newline at end of file + return """ +
+
+
+ {{ message.author_name }} +
+
+ {{ message.message_time }} +
+
+
+ {{ message.message }} +
+
+ """ diff --git a/community/patches.txt b/community/patches.txt index 5c9f065e..d7889b69 100644 --- a/community/patches.txt +++ b/community/patches.txt @@ -4,3 +4,5 @@ community.patches.save_abbr_for_community_members community.patches.create_mentor_request_email_templates community.patches.replace_member_with_user_in_batch_membership community.patches.replace_member_with_user_in_course_mentor_mapping +community.patches.replace_member_with_user_in_lms_message +community.patches.replace_member_with_user_in_mentor_request diff --git a/community/patches/replace_member_with_user_in_lms_message.py b/community/patches/replace_member_with_user_in_lms_message.py new file mode 100644 index 00000000..8cf2cb2b --- /dev/null +++ b/community/patches/replace_member_with_user_in_lms_message.py @@ -0,0 +1,10 @@ +from __future__ import unicode_literals +import frappe + +def execute(): + frappe.reload_doc("lms", "doctype", "lms_message") + messages = frappe.get_all("LMS Message", ["author", "name"]) + for message in messages: + user = frappe.db.get_value("Community Member", message.author, ["email", "full_name"], as_dict=True) + frappe.db.set_value("LMS Message", message.name, "author", user.email) + frappe.db.set_value("LMS Message", message.name, "author_name", user.full_name) diff --git a/community/patches/replace_member_with_user_in_mentor_request.py b/community/patches/replace_member_with_user_in_mentor_request.py new file mode 100644 index 00000000..abda27ae --- /dev/null +++ b/community/patches/replace_member_with_user_in_mentor_request.py @@ -0,0 +1,10 @@ +from __future__ import unicode_literals +import frappe + +def execute(): + frappe.reload_doc("lms", "doctype", "lms_mentor_request") + requests = frappe.get_all("LMS Mentor Request", ["member", "name"]) + for request in requests: + user = frappe.db.get_value("Community Member", request.member, ["email", "full_name"], as_dict=True) + frappe.db.set_value("LMS Mentor Request", request.name, "member", user.email) + frappe.db.set_value("LMS Mentor Request", request.name, "member_name", user.full_name) diff --git a/community/public/css/style.css b/community/public/css/style.css index e68467d2..65c9b48b 100644 --- a/community/public/css/style.css +++ b/community/public/css/style.css @@ -163,7 +163,7 @@ img.profile-photo { } .msger-inputarea { - position: absolute; + position: fixed; bottom: 0; width: 100%; display: flex; @@ -225,3 +225,8 @@ img.profile-photo { font-weight: 600; line-height: 51px; } + +.anchor_style { + text-decoration: none; + color: inherit; +} diff --git a/community/templates/message.html b/community/templates/message.html new file mode 100644 index 00000000..5826409a --- /dev/null +++ b/community/templates/message.html @@ -0,0 +1,13 @@ +
+
+
+ {{ message.author_name }} +
+
+ {{ message.message_time }} +
+
+
+ {{ message.message }} +
+
diff --git a/community/www/batch/discuss.js b/community/www/batch/discuss.js index d6380ac2..74f435c1 100644 --- a/community/www/batch/discuss.js +++ b/community/www/batch/discuss.js @@ -30,4 +30,4 @@ frappe.ready(() => { $(".msger-input").val(""); } }) -}) \ No newline at end of file +}) diff --git a/community/www/batch/discuss.py b/community/www/batch/discuss.py index fcd5ebda..5da3db2d 100644 --- a/community/www/batch/discuss.py +++ b/community/www/batch/discuss.py @@ -1,9 +1,6 @@ import frappe from . import utils -from community.lms.doctype.lms_batch.lms_batch import get_messages def get_context(context): utils.get_common_context(context) - - context.members = utils.get_batch_members(context.batch.name) - context.member_count = len(context.members) + context.messages = context.batch.get_messages() diff --git a/community/www/batch/members.html b/community/www/batch/members.html index 1fdff505..293af412 100644 --- a/community/www/batch/members.html +++ b/community/www/batch/members.html @@ -1,6 +1,5 @@ {% extends "templates/base.html" %} {% from "www/macros/sidebar.html" import Sidebar %} -{% from "www/macros/profile.html" import Profile %} {% from "www/macros/common_macro.html" import BatchHearder %} {% block title %}Members{% endblock %} @@ -14,27 +13,27 @@ {{ Sidebar(course, batch) }}
- {{ BatchHearder(course.title, member_count)}} - {{ MembersList(members)}} + {{ BatchHearder(course.title, member_count)}} + {{ MembersList(members)}}
{% endblock %} {% macro MembersList(members) %}
- {% for member in members %} -
-
- {{ widgets.Avatar(member=member, avatar_class="avatar-medium") }} {{ member.full_name }} -
-
- {{member.full_name}} -
- {% if member.is_mentor %} -
Mentor
- {% endif %} -
-
- {% endfor %} + {% for member in members %} +
+
+ {{ widgets.Avatar(member=member, avatar_class="avatar-medium") }} +
+ + {% if course.is_mentor(member.name) %} +
Mentor
+ {% endif %} +
+
+ {% endfor %}
{% endmacro %} diff --git a/community/www/batch/members.py b/community/www/batch/members.py index 1d04ac15..48be81c9 100644 --- a/community/www/batch/members.py +++ b/community/www/batch/members.py @@ -3,6 +3,3 @@ from . import utils def get_context(context): utils.get_common_context(context) - - context.members = utils.get_batch_members(context.batch.name) - context.member_count = len(context.members) diff --git a/community/www/batch/utils.py b/community/www/batch/utils.py index 51e77eba..8f375248 100644 --- a/community/www/batch/utils.py +++ b/community/www/batch/utils.py @@ -19,25 +19,10 @@ def get_common_context(context): context.course = course context.batch = batch + context.members = batch.get_mentors() + batch.get_students() + context.member_count = len(context.members) context.livecode_url = get_livecode_url() def get_livecode_url(): return frappe.db.get_single_value("LMS Settings", "livecode_url") -def get_batch_members(batch_name): - members = [] - memberships = frappe.get_all("LMS Batch Membership", {"batch": batch_name}, ["member", "member_type"]) - - for membership in memberships: - member = get_member_with_name(membership.member) - if membership.member_type == "Mentor": - member.is_mentor = True - members.append(member) - return members - -def get_member_with_name(name): - try: - return frappe.get_doc("Community Member", name) - except frappe.DoesNotExistError: - return - diff --git a/community/www/courses/utils.py b/community/www/courses/utils.py index 189a0f46..e69de29b 100644 --- a/community/www/courses/utils.py +++ b/community/www/courses/utils.py @@ -1,49 +0,0 @@ -import frappe - -def get_member_with_email(): - try: - return frappe.db.get_value("Community Member", {"email": frappe.session.user}, "name") - except frappe.DoesNotExistError: - return - -def get_member_with_name(name): - try: - return frappe.get_doc("Community Member", name) - except frappe.DoesNotExistError: - return - -def get_batch(code): - try: - print("get_batch", code) - return frappe.db.get_value("LMS Batch", {"name": code}, ["name", "description"], as_dict=True) - except frappe.DoesNotExistError: - print("Error: notfound") - return - -def is_member_of_batch(batch_code): - membership = frappe.get_all("LMS Batch Membership", {"batch": batch_code, "member": get_member_with_email()}) - if len(membership): - return True - return False - -def redirect_if_not_a_member(course,batch_code): - if not is_member_of_batch(batch_code): - frappe.local.flags.redirect_location = "/courses/" + course - raise frappe.Redirect - -def get_course(name): - try: - return frappe.get_doc("LMS Course", {"name": name}) - except frappe.DoesNotExistError: - return - -def get_batch_members(batch): - members = [] - memberships = frappe.get_all("LMS Batch Membership", {"batch": batch}, ["member", "member_type"]) - - for membership in memberships: - member = get_member_with_name(membership.member) - if membership.member_type == "Mentor": - member.is_mentor = True - members.append(member) - return members diff --git a/community/www/dashboard/index.html b/community/www/dashboard/index.html index bfbcf195..864ffcb4 100644 --- a/community/www/dashboard/index.html +++ b/community/www/dashboard/index.html @@ -90,12 +90,12 @@ {% block content %}
-
- {{ widgets.Avatar(member=member, avatar_class="avatar-medium") }} {{ member.full_name }} +
+ {{ widgets.Avatar(member=member, avatar_class="avatar-xl") }}
- {{member.full_name}} + {{ member.full_name }}