feat: notifications
This commit is contained in:
@@ -385,3 +385,16 @@ def get_certificates(member):
|
||||
fields=["name", "course", "course_title", "issue_date", "template"],
|
||||
order_by="creation desc",
|
||||
)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_all_users():
|
||||
users = frappe.get_all(
|
||||
"User",
|
||||
{
|
||||
"enabled": 1,
|
||||
},
|
||||
["name", "full_name", "user_image"],
|
||||
)
|
||||
|
||||
return {user.name: user for user in users}
|
||||
|
||||
@@ -281,21 +281,21 @@ def get_lesson_index(lesson_name):
|
||||
"Lesson Reference", {"lesson": lesson_name}, ["idx", "parent"], as_dict=True
|
||||
)
|
||||
if not lesson:
|
||||
return "1.1"
|
||||
return "1-1"
|
||||
|
||||
chapter = frappe.db.get_value(
|
||||
"Chapter Reference", {"chapter": lesson.parent}, ["idx"], as_dict=True
|
||||
)
|
||||
if not chapter:
|
||||
return "1.1"
|
||||
return "1-1"
|
||||
|
||||
return f"{chapter.idx}.{lesson.idx}"
|
||||
return f"{chapter.idx}-{lesson.idx}"
|
||||
|
||||
|
||||
def get_lesson_url(course, lesson_number):
|
||||
if not lesson_number:
|
||||
return
|
||||
return f"/lms/courses/{course}/learn/{lesson_number}"
|
||||
return f"/courses/{course}/learn/{lesson_number}"
|
||||
|
||||
|
||||
def get_batch(course, batch_name):
|
||||
@@ -645,19 +645,23 @@ def handle_notifications(doc, method):
|
||||
|
||||
def create_notification_log(doc, topic):
|
||||
course = frappe.db.get_value("Course Lesson", topic.reference_docname, "course")
|
||||
course_title = frappe.db.get_value("LMS Course", course, "title")
|
||||
instructors = frappe.db.get_all(
|
||||
"Course Instructor", {"parent": course}, pluck="instructor"
|
||||
)
|
||||
|
||||
notification = frappe._dict(
|
||||
{
|
||||
"subject": _("New reply on the topic {0}").format(topic.title),
|
||||
"subject": _("New reply on the topic {0} in course {1}").format(
|
||||
topic.title, course_title
|
||||
),
|
||||
"email_content": doc.reply,
|
||||
"document_type": topic.reference_doctype,
|
||||
"document_name": topic.reference_docname,
|
||||
"for_user": topic.owner,
|
||||
"from_user": doc.owner,
|
||||
"type": "Alert",
|
||||
"link": get_lesson_url(course, get_lesson_index(topic.reference_docname)),
|
||||
}
|
||||
)
|
||||
|
||||
@@ -671,6 +675,12 @@ def create_notification_log(doc, topic):
|
||||
|
||||
|
||||
def notify_mentions(doc, topic):
|
||||
outgoing_email_account = frappe.get_cached_value(
|
||||
"Email Account", {"default_outgoing": 1, "enable_outgoing": 1}, "name"
|
||||
)
|
||||
if not outgoing_email_account or not frappe.conf.get("mail_login"):
|
||||
return
|
||||
|
||||
mentions = extract_mentions(doc.reply)
|
||||
if not mentions:
|
||||
return
|
||||
@@ -1708,6 +1718,7 @@ def create_discussion_topic(doctype, docname):
|
||||
doc = frappe.new_doc("Discussion Topic")
|
||||
doc.update(
|
||||
{
|
||||
"title": docname,
|
||||
"reference_doctype": doctype,
|
||||
"reference_docname": docname,
|
||||
}
|
||||
|
||||
@@ -87,4 +87,5 @@ lms.patches.v1_0.custom_perm_for_discussions #14-01-2024
|
||||
lms.patches.v1_0.rename_evaluator_role
|
||||
lms.patches.v1_0.change_navbar_urls
|
||||
lms.patches.v1_0.set_published_on
|
||||
lms.patches.v2_0.fix_progress_percentage
|
||||
lms.patches.v2_0.fix_progress_percentage
|
||||
lms.patches.v2_0.add_discussion_topic_titles
|
||||
13
lms/patches/v2_0/add_discussion_topic_titles.py
Normal file
13
lms/patches/v2_0/add_discussion_topic_titles.py
Normal file
@@ -0,0 +1,13 @@
|
||||
import frappe
|
||||
|
||||
|
||||
def execute():
|
||||
topics = frappe.get_all(
|
||||
"Discussion Topic",
|
||||
{"title": ["is", "not set"]},
|
||||
["name", "reference_docname", "title"],
|
||||
)
|
||||
|
||||
for topic in topics:
|
||||
if not topic.title:
|
||||
frappe.db.set_value("Discussion Topic", topic.name, "title", topic.reference_docname)
|
||||
@@ -15,9 +15,9 @@
|
||||
<meta name="twitter:title" content="{{ meta.title }}" />
|
||||
<meta name="twitter:image" content="{{ meta.image }}" />
|
||||
<meta name="twitter:description" content="{{ meta.description }}" />
|
||||
<script type="module" crossorigin src="/assets/lms/frontend/assets/index-CdhjdjEj.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/assets/lms/frontend/assets/frappe-ui-CgFK8870.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/lms/frontend/assets/frappe-ui-DzKBfka9.css">
|
||||
<script type="module" crossorigin src="/assets/lms/frontend/assets/index-C-DogOtg.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/assets/lms/frontend/assets/frappe-ui-CGsuCsfq.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/lms/frontend/assets/frappe-ui-B1gEXx4C.css">
|
||||
<link rel="stylesheet" crossorigin href="/assets/lms/frontend/assets/index-C1pDkvO9.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
Reference in New Issue
Block a user