From 677dc59399d2b5974a402dc589013013d69078a9 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Thu, 31 Aug 2023 11:49:51 +0530 Subject: [PATCH] feat: instructor notes --- .../doctype/course_lesson/course_lesson.json | 8 ++++- lms/lms/doctype/lms_course/lms_course.py | 2 ++ lms/lms/utils.py | 1 + lms/www/batch/edit.html | 14 ++++++++- lms/www/batch/edit.js | 29 ++++++++++++++++++- lms/www/batch/learn.html | 15 ++++++++-- lms/www/batch/learn.py | 18 ++++++++---- 7 files changed, 77 insertions(+), 10 deletions(-) diff --git a/lms/lms/doctype/course_lesson/course_lesson.json b/lms/lms/doctype/course_lesson/course_lesson.json index eaee75f2..dc224a69 100644 --- a/lms/lms/doctype/course_lesson/course_lesson.json +++ b/lms/lms/doctype/course_lesson/course_lesson.json @@ -23,6 +23,7 @@ "column_break_15", "file_type", "section_break_11", + "instructor_notes", "body", "help_section", "help" @@ -131,11 +132,16 @@ { "fieldname": "column_break_15", "fieldtype": "Column Break" + }, + { + "fieldname": "instructor_notes", + "fieldtype": "Text Editor", + "label": "Instructor Notes" } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2023-05-02 12:42:16.926753", + "modified": "2023-08-31 11:11:22.034553", "modified_by": "Administrator", "module": "LMS", "name": "Course Lesson", diff --git a/lms/lms/doctype/lms_course/lms_course.py b/lms/lms/doctype/lms_course/lms_course.py index 6b51022d..27384f3f 100644 --- a/lms/lms/doctype/lms_course/lms_course.py +++ b/lms/lms/doctype/lms_course/lms_course.py @@ -281,6 +281,7 @@ def save_lesson( preview, idx, lesson, + instructor_notes=None, youtube=None, quiz_id=None, question=None, @@ -296,6 +297,7 @@ def save_lesson( "chapter": chapter, "title": title, "body": body, + "instructor_notes": instructor_notes, "include_in_preview": preview, "youtube": youtube, "quiz_id": quiz_id, diff --git a/lms/lms/utils.py b/lms/lms/utils.py index f41480b5..f101e9f0 100644 --- a/lms/lms/utils.py +++ b/lms/lms/utils.py @@ -141,6 +141,7 @@ def get_lesson_details(chapter): "quiz_id", "question", "file_type", + "instructor_notes", ], as_dict=True, ) diff --git a/lms/www/batch/edit.html b/lms/www/batch/edit.html index 6fa88e22..9c10c042 100644 --- a/lms/www/batch/edit.html +++ b/lms/www/batch/edit.html @@ -86,6 +86,19 @@ +
+
+ {{ _("Instructor Notes") }} +
+
+ {{ _("This notes will only be visible to the Course Creator, Course Evaluaor and Moderator.") }} +
+
+ {% if lesson.instructor_notes %} +
{{ lesson.instructor_notes }}
+ {% endif %} +
+
@@ -117,7 +130,6 @@ }; {% endif %} - {{ include_script('controls.bundle.js') }} diff --git a/lms/www/batch/edit.js b/lms/www/batch/edit.js index dd0ae722..6b050957 100644 --- a/lms/www/batch/edit.js +++ b/lms/www/batch/edit.js @@ -1,7 +1,15 @@ frappe.ready(() => { - frappe.telemetry.capture("on_lesson_creation_page", "lms"); let self = this; this.quiz_in_lesson = []; + + frappe.telemetry.capture("on_lesson_creation_page", "lms"); + + if ($("#instructor-notes").length) { + frappe.require("controls.bundle.js", () => { + make_instructor_notes_component(); + }); + } + if ($("#current-lesson-content").length) { parse_string_to_lesson(); } @@ -149,6 +157,8 @@ const save = (lesson_content) => { preview: $("#preview").prop("checked") ? 1 : 0, idx: $("#lesson-title").data("index"), lesson: lesson ? lesson : "", + instructor_notes: + this.instructor_notes.get_values().instructor_notes, }, callback: (data) => { frappe.show_alert({ @@ -466,3 +476,20 @@ class Upload { }; } } + +const make_instructor_notes_component = () => { + this.instructor_notes = new frappe.ui.FieldGroup({ + fields: [ + { + fieldname: "instructor_notes", + fieldtype: "Text Editor", + default: $("#current-instructor-notes").html(), + }, + ], + body: $("#instructor-notes").get(0), + }); + this.instructor_notes.make(); + $("#instructor-notes .form-section:last").removeClass("empty-section"); + $("#instructor-notes .frappe-control").removeClass("hide-control"); + $("#instructor-notes .form-column").addClass("p-0"); +}; diff --git a/lms/www/batch/learn.html b/lms/www/batch/learn.html index bf4a8d77..8f44c010 100644 --- a/lms/www/batch/learn.html +++ b/lms/www/batch/learn.html @@ -149,17 +149,28 @@ {% if show_lesson %} {% if is_instructor and not lesson.include_in_preview %} -
+
{{ _("This lesson is not available for preview. As you are the Instructor of the course only you can see it.") }} ×
{% endif %} + {% if lesson.instructor_notes and (is_moderator or instructor or is_evaluator) %} +
+
+ {{ _("Instructor Notes") }} +
+
+ {{ lesson.instructor_notes }} +
+
+ {% endif %} + {{ render_html(lesson) }} {% else %} {% set course_link = "" + _('here') + "" %} -
+
{{ _("There is no preview available for this lesson. Please join the course to access it. Click {0} to enroll.").format(course_link) }} diff --git a/lms/www/batch/learn.py b/lms/www/batch/learn.py index 36244a2f..ddc036f1 100644 --- a/lms/www/batch/learn.py +++ b/lms/www/batch/learn.py @@ -2,7 +2,12 @@ import frappe from frappe import _ from frappe.utils import cstr, flt -from lms.lms.utils import get_lesson_url, has_course_moderator_role, is_instructor +from lms.lms.utils import ( + get_lesson_url, + has_course_moderator_role, + is_instructor, + has_course_evaluator_role, +) from lms.www.utils import ( get_common_context, redirect_to_lesson, @@ -37,20 +42,23 @@ def get_context(context): redirect_to_lesson(context.course, index_) context.lesson = get_current_lesson_details(lesson_number, context) - instructor = is_instructor(context.course.name) + context.instructor = is_instructor(context.course.name) + context.is_moderator = has_course_moderator_role() + context.is_evaluator = has_course_evaluator_role() context.show_lesson = ( context.membership or (context.lesson and context.lesson.include_in_preview) - or instructor - or has_course_moderator_role() + or context.instructor + or context.is_moderator + or context.is_evaluator ) if not context.lesson: context.lesson = frappe._dict() if frappe.form_dict.get("edit"): - if not instructor and not has_course_moderator_role(): + if not context.instructor and not context.is_moderator: raise frappe.PermissionError(_("You do not have permission to access this page.")) context.lesson.edit_mode = True else: