diff --git a/community/community/doctype/community_member/community_member.json b/community/community/doctype/community_member/community_member.json index 5d9330f2..58c40451 100644 --- a/community/community/doctype/community_member/community_member.json +++ b/community/community/doctype/community_member/community_member.json @@ -1,7 +1,8 @@ { "actions": [], "allow_guest_to_view": 1, - "autoname": "field:email", + "allow_rename": 1, + "autoname": "field:username", "creation": "2021-02-12 15:47:23.591567", "doctype": "DocType", "editable_grid": 1, @@ -14,7 +15,7 @@ "photo", "short_intro", "bio", - "user_name", + "username", "route" ], "fields": [ @@ -29,8 +30,7 @@ "fieldtype": "Data", "in_list_view": 1, "label": "Full Name", - "reqd": 1, - "unique": 1 + "reqd": 1 }, { "allow_in_quick_entry": 1, @@ -56,12 +56,6 @@ "fieldtype": "Markdown Editor", "label": "Bio" }, - { - "fieldname": "user_name", - "fieldtype": "Data", - "label": "User Name", - "unique": 1 - }, { "fieldname": "route", "fieldtype": "Data", @@ -74,12 +68,18 @@ "options": "Email", "reqd": 1, "unique": 1 + }, + { + "fieldname": "username", + "fieldtype": "Data", + "label": "User Name", + "unique": 1 } ], "has_web_view": 1, "index_web_pages_for_search": 1, "links": [], - "modified": "2021-03-12 17:41:32.786762", + "modified": "2021-03-22 12:16:18.823037", "modified_by": "Administrator", "module": "Community", "name": "Community Member", diff --git a/community/community/doctype/community_member/community_member.py b/community/community/doctype/community_member/community_member.py index 49bfa49a..7661b733 100644 --- a/community/community/doctype/community_member/community_member.py +++ b/community/community/doctype/community_member/community_member.py @@ -7,6 +7,7 @@ import frappe from frappe.website.website_generator import WebsiteGenerator import re from frappe import _ +from frappe.model.rename_doc import rename_doc class CommunityMember(WebsiteGenerator): def get_context(self, context): @@ -14,24 +15,27 @@ class CommunityMember(WebsiteGenerator): return context def validate(self): - self.validate_user_name() - if self.route != self.user_name: - self.route = self.user_name + self.validate_username() + if self.route != self.username: + self.route = self.username - def validate_user_name(self): - if self.user_name: - if len(self.user_name) < 4: + def validate_username(self): + if self.username: + if len(self.username) < 4: frappe.throw(_("Username must be atleast 4 characters long.")) - if not re.match("^[A-Za-z0-9_]*$", self.user_name): + if not re.match("^[A-Za-z0-9_]*$", self.username): frappe.throw(_("Username can only contain alphabets, numbers and underscore.")) - self.user_name = self.user_name.lower() + self.username = self.username.lower() + def on_update(self): + if self.username != self.name: + rename_doc(self.doctype, self.name, self.username, force=False, merge=False, ignore_permissions=True, ignore_if_exists=False) def create_member_from_user(doc, method): member = frappe.get_doc({ "doctype": "Community Member", "full_name": doc.full_name, - "user_name": doc.username, + "username": doc.username if len(doc.username) > 3 else doc.username + "_community", "email": doc.email, "route": doc.username, "owner": doc.email diff --git a/community/community/web_form/update_profile/update_profile.js b/community/community/web_form/update_profile/update_profile.js index 699703c5..b62f9465 100644 --- a/community/community/web_form/update_profile/update_profile.js +++ b/community/community/web_form/update_profile/update_profile.js @@ -1,3 +1,5 @@ frappe.ready(function() { - // bind events here + frappe.web_form.after_save = () => { + window.location.href = frappe.web_form.get_value("username") + } }) \ No newline at end of file diff --git a/community/community/web_form/update_profile/update_profile.json b/community/community/web_form/update_profile/update_profile.json index b762e1f6..6b693e6b 100644 --- a/community/community/web_form/update_profile/update_profile.json +++ b/community/community/web_form/update_profile/update_profile.json @@ -19,7 +19,7 @@ "is_standard": 1, "login_required": 1, "max_attachment_size": 0, - "modified": "2021-03-12 18:14:19.363139", + "modified": "2021-03-22 12:04:22.571655", "modified_by": "Administrator", "module": "Community", "name": "update-profile", @@ -50,14 +50,14 @@ }, { "allow_read_on_all_link_options": 0, - "fieldname": "user_name", + "fieldname": "username", "fieldtype": "Data", "hidden": 0, "label": "User Name", "max_length": 0, "max_value": 0, "read_only": 0, - "reqd": 0, + "reqd": 1, "show_in_filter": 0 }, { diff --git a/community/lms/doctype/lms_batch/__init__.py b/community/lms/doctype/lms_batch/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/community/lms/doctype/lms_batch/lms_batch.js b/community/lms/doctype/lms_batch/lms_batch.js new file mode 100644 index 00000000..73005977 --- /dev/null +++ b/community/lms/doctype/lms_batch/lms_batch.js @@ -0,0 +1,8 @@ +// Copyright (c) 2021, FOSS United and contributors +// For license information, please see license.txt + +frappe.ui.form.on('LMS Batch', { + // refresh: function(frm) { + + // } +}); diff --git a/community/lms/doctype/lms_batch/lms_batch.json b/community/lms/doctype/lms_batch/lms_batch.json new file mode 100644 index 00000000..ca79b127 --- /dev/null +++ b/community/lms/doctype/lms_batch/lms_batch.json @@ -0,0 +1,113 @@ +{ + "actions": [], + "autoname": "field:title", + "creation": "2021-03-18 19:37:34.614796", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "course", + "title", + "column_break_3", + "code", + "section_break_5", + "description", + "section_break_7", + "visibility", + "membership", + "column_break_9", + "status", + "stage" + ], + "fields": [ + { + "fieldname": "course", + "fieldtype": "Link", + "label": "Course", + "options": "LMS Course" + }, + { + "fieldname": "code", + "fieldtype": "Data", + "label": "Code", + "read_only": 1, + "unique": 1 + }, + { + "fieldname": "title", + "fieldtype": "Data", + "label": "Title", + "unique": 1 + }, + { + "fieldname": "description", + "fieldtype": "Markdown Editor", + "label": "Description" + }, + { + "fieldname": "visibility", + "fieldtype": "Select", + "label": "Visibility", + "options": "\nPublic\nUnlisted\nPrivate" + }, + { + "fieldname": "membership", + "fieldtype": "Select", + "label": "Membership", + "options": "\nOpen\nRestricted\nInvite Only\nClosed" + }, + { + "fieldname": "status", + "fieldtype": "Select", + "label": "Status", + "options": "\nActive\nInactive" + }, + { + "fieldname": "stage", + "fieldtype": "Select", + "label": "Stage", + "options": "\nReady\nIn Progress\nCompleted\nCancelled" + }, + { + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, + { + "fieldname": "section_break_5", + "fieldtype": "Section Break" + }, + { + "fieldname": "column_break_9", + "fieldtype": "Column Break" + }, + { + "fieldname": "section_break_7", + "fieldtype": "Section Break" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-03-19 12:56:33.054884", + "modified_by": "Administrator", + "module": "LMS", + "name": "LMS Batch", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "quick_entry": 1, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/community/lms/doctype/lms_batch/lms_batch.py b/community/lms/doctype/lms_batch/lms_batch.py new file mode 100644 index 00000000..0f0d9fee --- /dev/null +++ b/community/lms/doctype/lms_batch/lms_batch.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2021, FOSS United and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class LMSBatch(Document): + def validate(self): + if not self.code: + self.generate_code() + + def generate_code(self): + short_code = frappe.db.get_value("LMS Course", self.course, "short_code") + course_batches = frappe.get_all("LMS Batch",{"course":self.course}) + self.code = short_code + str(len(course_batches) + 1) diff --git a/community/lms/doctype/lms_batch/test_lms_batch.py b/community/lms/doctype/lms_batch/test_lms_batch.py new file mode 100644 index 00000000..df19a696 --- /dev/null +++ b/community/lms/doctype/lms_batch/test_lms_batch.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2021, FOSS United and Contributors +# See license.txt +from __future__ import unicode_literals + +# import frappe +import unittest + +class TestLMSBatch(unittest.TestCase): + pass diff --git a/community/lms/doctype/lms_batch_membership/__init__.py b/community/lms/doctype/lms_batch_membership/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/community/lms/doctype/lms_batch_membership/lms_batch_membership.js b/community/lms/doctype/lms_batch_membership/lms_batch_membership.js new file mode 100644 index 00000000..dfa9ab2d --- /dev/null +++ b/community/lms/doctype/lms_batch_membership/lms_batch_membership.js @@ -0,0 +1,8 @@ +// Copyright (c) 2021, FOSS United and contributors +// For license information, please see license.txt + +frappe.ui.form.on('LMS Batch Membership', { + // refresh: function(frm) { + + // } +}); diff --git a/community/lms/doctype/lms_batch_membership/lms_batch_membership.json b/community/lms/doctype/lms_batch_membership/lms_batch_membership.json new file mode 100644 index 00000000..23e29f50 --- /dev/null +++ b/community/lms/doctype/lms_batch_membership/lms_batch_membership.json @@ -0,0 +1,68 @@ +{ + "actions": [], + "creation": "2021-03-18 19:52:10.673835", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "batch", + "member", + "member_type", + "role" + ], + "fields": [ + { + "fieldname": "batch", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Batch", + "options": "LMS Batch" + }, + { + "fieldname": "member", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Member", + "options": "Community Member" + }, + { + "fieldname": "member_type", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Member Type", + "options": "\nStudent\nMentor\nStaff" + }, + { + "fieldname": "role", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Role", + "options": "\nMember\nAdmin" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-03-19 15:06:21.374601", + "modified_by": "Administrator", + "module": "LMS", + "name": "LMS Batch Membership", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "quick_entry": 1, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/community/lms/doctype/lms_batch_membership/lms_batch_membership.py b/community/lms/doctype/lms_batch_membership/lms_batch_membership.py new file mode 100644 index 00000000..d7639fcd --- /dev/null +++ b/community/lms/doctype/lms_batch_membership/lms_batch_membership.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2021, FOSS United and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document +from frappe import _ + +class LMSBatchMembership(Document): + + def validate(self): + self.validate_membership_in_same_batch() + 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}, ["member_type","member"], as_dict=1) + if previous_membership: + member_name = frappe.db.get_value("Community Member", 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"]) + 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") + frappe.throw(_("{0} is already a {1} of {2} course through {3} batch").format(member_name, membership.member_type, course, membership.batch)) \ No newline at end of file diff --git a/community/lms/doctype/lms_batch_membership/test_lms_batch_membership.py b/community/lms/doctype/lms_batch_membership/test_lms_batch_membership.py new file mode 100644 index 00000000..43ceaccf --- /dev/null +++ b/community/lms/doctype/lms_batch_membership/test_lms_batch_membership.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2021, FOSS United and Contributors +# See license.txt +from __future__ import unicode_literals + +# import frappe +import unittest + +class TestLMSBatchMembership(unittest.TestCase): + pass diff --git a/community/lms/doctype/lms_course/lms_course.json b/community/lms/doctype/lms_course/lms_course.json index 57767782..5478d5c1 100644 --- a/community/lms/doctype/lms_course/lms_course.json +++ b/community/lms/doctype/lms_course/lms_course.json @@ -10,7 +10,10 @@ "field_order": [ "title", "description", - "is_published" + "section_break_3", + "is_published", + "column_break_5", + "short_code" ], "fields": [ { @@ -31,12 +34,25 @@ "fieldname": "is_published", "fieldtype": "Check", "label": "Published" + }, + { + "fieldname": "short_code", + "fieldtype": "Data", + "label": "Short Code" + }, + { + "fieldname": "section_break_3", + "fieldtype": "Section Break" + }, + { + "fieldname": "column_break_5", + "fieldtype": "Column Break" } ], "index_web_pages_for_search": 1, "is_published_field": "is_published", "links": [], - "modified": "2021-03-05 11:01:09.327111", + "modified": "2021-03-19 15:44:47.411705", "modified_by": "Administrator", "module": "LMS", "name": "LMS Course", diff --git a/community/lms/doctype/lms_message/__init__.py b/community/lms/doctype/lms_message/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/community/lms/doctype/lms_message/lms_message.js b/community/lms/doctype/lms_message/lms_message.js new file mode 100644 index 00000000..ad20e5d7 --- /dev/null +++ b/community/lms/doctype/lms_message/lms_message.js @@ -0,0 +1,8 @@ +// Copyright (c) 2021, FOSS United and contributors +// For license information, please see license.txt + +frappe.ui.form.on('LMS Message', { + // refresh: function(frm) { + + // } +}); diff --git a/community/lms/doctype/lms_message/lms_message.json b/community/lms/doctype/lms_message/lms_message.json new file mode 100644 index 00000000..e1562c85 --- /dev/null +++ b/community/lms/doctype/lms_message/lms_message.json @@ -0,0 +1,63 @@ +{ + "actions": [], + "creation": "2021-03-19 12:19:32.355307", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "batch", + "author", + "message", + "pin" + ], + "fields": [ + { + "fieldname": "batch", + "fieldtype": "Link", + "label": "Batch", + "options": "LMS Batch" + }, + { + "fieldname": "author", + "fieldtype": "Link", + "label": "Author", + "options": "Community Member" + }, + { + "fieldname": "message", + "fieldtype": "Markdown Editor", + "label": "Message" + }, + { + "default": "0", + "fieldname": "pin", + "fieldtype": "Check", + "label": "Pin" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2021-03-22 13:57:50.500746", + "modified_by": "Administrator", + "module": "LMS", + "name": "LMS Message", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "quick_entry": 1, + "sort_field": "modified", + "sort_order": "DESC", + "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 new file mode 100644 index 00000000..4ce718ba --- /dev/null +++ b/community/lms/doctype/lms_message/lms_message.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2021, FOSS United and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +# import frappe +from frappe.model.document import Document + +class LMSMessage(Document): + pass diff --git a/community/lms/doctype/lms_message/test_lms_message.py b/community/lms/doctype/lms_message/test_lms_message.py new file mode 100644 index 00000000..28e61f94 --- /dev/null +++ b/community/lms/doctype/lms_message/test_lms_message.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2021, FOSS United and Contributors +# See license.txt +from __future__ import unicode_literals + +# import frappe +import unittest + +class TestLMSMessage(unittest.TestCase): + pass diff --git a/community/lms/web_form/__init__.py b/community/lms/web_form/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/community/lms/web_form/add_messages/__init__.py b/community/lms/web_form/add_messages/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/community/lms/web_form/add_messages/add_messages.js b/community/lms/web_form/add_messages/add_messages.js new file mode 100644 index 00000000..99c31b8f --- /dev/null +++ b/community/lms/web_form/add_messages/add_messages.js @@ -0,0 +1,12 @@ +frappe.ready(function() { + // bind events here + frappe.web_form.after_load = () => { + frappe.web_form.set_value(["batch"], [frappe.utils.get_url_arg('batch')]); + frappe.web_form.set_value(["author"], [frappe.utils.get_url_arg('author')]); + } + frappe.web_form.success_url = `courses/course?course=${frappe.utils.get_url_arg('course')}`; + + $('.breadcrumb-container') + .html(`Back to my course`) + .addClass('py-4'); +}) \ No newline at end of file diff --git a/community/lms/web_form/add_messages/add_messages.json b/community/lms/web_form/add_messages/add_messages.json new file mode 100644 index 00000000..80c36fee --- /dev/null +++ b/community/lms/web_form/add_messages/add_messages.json @@ -0,0 +1,77 @@ +{ + "accept_payment": 0, + "allow_comments": 0, + "allow_delete": 0, + "allow_edit": 0, + "allow_incomplete": 0, + "allow_multiple": 0, + "allow_print": 0, + "amount": 0.0, + "amount_based_on_field": 0, + "apply_document_permissions": 0, + "button_label": "Send", + "client_script": "", + "creation": "2021-03-23 13:10:16.814983", + "doc_type": "LMS Message", + "docstatus": 0, + "doctype": "Web Form", + "idx": 0, + "is_standard": 1, + "login_required": 1, + "max_attachment_size": 0, + "modified": "2021-03-23 15:10:24.681090", + "modified_by": "Administrator", + "module": "LMS", + "name": "add-messages", + "owner": "Administrator", + "payment_button_label": "Buy Now", + "published": 1, + "route": "add-messages", + "route_to_success_link": 0, + "show_attachments": 0, + "show_in_grid": 0, + "show_sidebar": 0, + "sidebar_items": [], + "success_url": "", + "title": "Add Messages", + "web_form_fields": [ + { + "allow_read_on_all_link_options": 0, + "fieldname": "batch", + "fieldtype": "Link", + "hidden": 0, + "label": "Batch", + "max_length": 0, + "max_value": 0, + "options": "LMS Batch", + "read_only": 1, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "message", + "fieldtype": "Data", + "hidden": 0, + "label": "Message", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0, + "show_in_filter": 0 + }, + { + "allow_read_on_all_link_options": 0, + "fieldname": "author", + "fieldtype": "Link", + "hidden": 1, + "label": "Author", + "max_length": 0, + "max_value": 0, + "options": "Community Member", + "read_only": 1, + "reqd": 0, + "show_in_filter": 0 + } + ] +} \ No newline at end of file diff --git a/community/lms/web_form/add_messages/add_messages.py b/community/lms/web_form/add_messages/add_messages.py new file mode 100644 index 00000000..2334f8b2 --- /dev/null +++ b/community/lms/web_form/add_messages/add_messages.py @@ -0,0 +1,7 @@ +from __future__ import unicode_literals + +import frappe + +def get_context(context): + # do your magic here + pass diff --git a/community/www/courses/course.html b/community/www/courses/course.html index 781b2ad3..4a70f82c 100644 --- a/community/www/courses/course.html +++ b/community/www/courses/course.html @@ -9,7 +9,7 @@ {% endblock %} {% block content %} -
+
Enrolled
- {% if not course_enrolled and frappe.session.user != "Guest" %} +

{{ course.title }}

-
{{ frappe.utils.md_to_html(course.description) }}
- + +
+
+
+
{{ frappe.utils.md_to_html(course.description) }}
+
+
+
+ {% if batches %} +
+ +
+ {% endif %} + {% if discussions %} +

+ Add Message +

+
+ {% for message in discussions %} +
+
{{ message.author }}
+ {{ message.message }} +
{{ message.creation }}
+
+ {% endfor %} +
+ {% endif %} +
+
-
{% for topic in course.topics %} diff --git a/community/www/courses/course.js b/community/www/courses/course.js index d8c50f98..787204f7 100644 --- a/community/www/courses/course.js +++ b/community/www/courses/course.js @@ -1,13 +1,34 @@ frappe.ready(() => { - if(frappe.session.user != "Guest"){ + var dropdown = document.getElementById("batches-dropdown") + if (dropdown) { + dropdown.onchange = () => { + frappe.call("community.www.courses.course.get_messages", {batch: dropdown.value}, (data) => { + var href_params = new URLSearchParams($(".add-message").children("a")[0].href) + $(".add-message").children("a")[0].href = `/add-messages?new=1&batch=${dropdown.value}&author=${href_params.get("author")}&course=${href_params.get("course")}` + if(data.message){ + $(".discussions").children().remove() + for (var i = 0; i < data.message.length; i++) { + var message = data.message[i] + var element = `
+
${message.author}
+ ${ message.message } +
${ message.creation }
+
` + $(".discussions").append(element) + } + } + }) + } + } + /* if(frappe.session.user != "Guest"){ frappe.call('community.www.courses.course.has_enrolled', { course: get_search_params().get("course") }, (data) => { if (data.message) { show_enrollment_badge() } }) - } + } */ }) - +/* var show_enrollment_badge = () => { $(".btn-enroll").addClass("hide"); $(".enrollment-badge").removeClass("hide"); @@ -21,5 +42,5 @@ $('.btn-enroll').on('click', (e) => { frappe.call('community.www.courses.course.enroll', { course: get_search_params().get("course") }, (data) => { show_enrollment_badge() }); -}); +}); */ diff --git a/community/www/courses/course.py b/community/www/courses/course.py index 60ea4c99..db0a30b7 100644 --- a/community/www/courses/course.py +++ b/community/www/courses/course.py @@ -8,7 +8,13 @@ def get_context(context): frappe.local.flags.redirect_location = '/courses' raise frappe.Redirect context.course = get_course(course_id) - context.course_enrolled = has_enrolled(course_id) + #context.course_enrolled = has_enrolled(course_id) + context.discussions, context.memberships = get_discussions(course_id) + context.member_type = context.memberships[0].member_type + if context.member_type != "Student": + context.batches = [membership.batch for membership in context.memberships] + context.current_batch = context.memberships[0].batch + context.author = context.memberships[0].member def get_course(name): course = frappe.db.get_value('LMS Course', name, @@ -22,9 +28,34 @@ def get_course(name): ) return course +def get_discussions(course): + memberships = get_membership(course) + messages = get_messages(memberships[0].batch) + return messages, memberships + +def get_membership(course): + memberships = [] + member = frappe.db.get_value("Community Member", {"email": frappe.session.user}, "name") + batches = frappe.get_all("LMS Batch", {"course": course}, ["name"]) + for batch in batches: + membership = frappe.db.get_value("LMS Batch Membership", {"member": member, "batch": batch.name}, ["batch", "member", "member_type"], as_dict=1) + if membership: + memberships.append(membership) + return memberships + +@frappe.whitelist() +def get_messages(batch): + messages = frappe.get_all("LMS Message", {"batch": batch}, ["*"], order_by="creation desc") + for message in messages: + message.message = frappe.utils.md_to_html(message.message) + message.creation = frappe.utils.format_datetime(message.creation, "medium") + member_email = frappe.db.get_value("Community Member", message.author, "email") + if member_email == frappe.session.user: + message.author = "You" + return messages + @frappe.whitelist() def has_enrolled(course): - print(frappe.db) return frappe.db.get_value("LMS Course Enrollment", {"course": course, "owner": frappe.session.user}) @frappe.whitelist()