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 """
-