From b6d9470a4e07010a7ca077d01ad15037105b984d Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Fri, 27 May 2022 11:44:41 +0530 Subject: [PATCH 1/7] fix: removed meta info from certificate page --- lms/www/courses/certificate.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/lms/www/courses/certificate.py b/lms/www/courses/certificate.py index bf0d2ec6..70dd7ff9 100644 --- a/lms/www/courses/certificate.py +++ b/lms/www/courses/certificate.py @@ -27,12 +27,6 @@ def get_context(context): context.custom_certificate_template = frappe.db.get_value("Web Template", template_name, "template") context.custom_template = render_template(context.custom_certificate_template, context) - context.metatags = { - "title": f"{member.full_name} - {course.title}", - "image": course.image, - "keywords": course.title, member.full_name - } - def redirect_to_course_list(): frappe.local.flags.redirect_location = "/courses" raise frappe.Redirect From 6e49cf14fa40a233e87c20569fe7db0bd1cc9565 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Thu, 2 Jun 2022 19:28:40 +0530 Subject: [PATCH 2/7] fix: validation for certificate request --- .../lms_certificate_request.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py index 3d674cf3..da76d1c4 100644 --- a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py @@ -4,9 +4,24 @@ import frappe from frappe.model.document import Document from frappe.model.mapper import get_mapped_doc +from frappe import _ +from frappe.utils import getdate, format_date, format_time class LMSCertificateRequest(Document): - pass + + def validate(self): + self.validate_if_existing_requests() + + def validate_if_existing_requests(self): + existing_requests = frappe.get_all("LMS Certificate Request", { + "member": self.member, + "course": self.course + }, ["date", "start_time", "course"]) + + for req in existing_requests: + if req.date == getdate(self.date) and getdate(self.date) <= getdate(): + course_title = frappe.db.get_value("LMS Course", req.course, "title") + frappe.throw(_(f"You already have an evaluation on {format_date(req.date, 'medium')} at {format_time(req.start_time, 'short')} for the course {course_title}.")) @frappe.whitelist() def create_certificate_request(course, date, day, start_time, end_time): From 9f575902b0b85dd958c8dedcfa61e5ada2572682 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Fri, 3 Jun 2022 09:16:54 +0530 Subject: [PATCH 3/7] fix: lms certificate existing request condition --- .../doctype/lms_certificate_request/lms_certificate_request.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py index da76d1c4..ebe39caf 100644 --- a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py @@ -19,7 +19,7 @@ class LMSCertificateRequest(Document): }, ["date", "start_time", "course"]) for req in existing_requests: - if req.date == getdate(self.date) and getdate(self.date) <= getdate(): + if req.date == getdate(self.date) and getdate() <= getdate(self.date): course_title = frappe.db.get_value("LMS Course", req.course, "title") frappe.throw(_(f"You already have an evaluation on {format_date(req.date, 'medium')} at {format_time(req.start_time, 'short')} for the course {course_title}.")) From d742d595b2bc8a897b59b74538086959e68862c2 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Fri, 3 Jun 2022 12:01:58 +0530 Subject: [PATCH 4/7] feat: notifications for certificate request --- lms/lms/notification/__init__.py | 0 .../certificate_request_creation/__init__.py | 0 .../certificate_request_creation.html | 5 ++++ .../certificate_request_creation.json | 27 ++++++++++++++++++ .../certificate_request_creation.md | 1 + .../certificate_request_creation.py | 5 ++++ .../certificate_request_reminder/__init__.py | 0 .../certificate_request_reminder.html | 5 ++++ .../certificate_request_reminder.json | 28 +++++++++++++++++++ .../certificate_request_reminder.md | 3 ++ .../certificate_request_reminder.py | 5 ++++ 11 files changed, 79 insertions(+) create mode 100644 lms/lms/notification/__init__.py create mode 100644 lms/lms/notification/certificate_request_creation/__init__.py create mode 100644 lms/lms/notification/certificate_request_creation/certificate_request_creation.html create mode 100644 lms/lms/notification/certificate_request_creation/certificate_request_creation.json create mode 100644 lms/lms/notification/certificate_request_creation/certificate_request_creation.md create mode 100644 lms/lms/notification/certificate_request_creation/certificate_request_creation.py create mode 100644 lms/lms/notification/certificate_request_reminder/__init__.py create mode 100644 lms/lms/notification/certificate_request_reminder/certificate_request_reminder.html create mode 100644 lms/lms/notification/certificate_request_reminder/certificate_request_reminder.json create mode 100644 lms/lms/notification/certificate_request_reminder/certificate_request_reminder.md create mode 100644 lms/lms/notification/certificate_request_reminder/certificate_request_reminder.py diff --git a/lms/lms/notification/__init__.py b/lms/lms/notification/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lms/lms/notification/certificate_request_creation/__init__.py b/lms/lms/notification/certificate_request_creation/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lms/lms/notification/certificate_request_creation/certificate_request_creation.html b/lms/lms/notification/certificate_request_creation/certificate_request_creation.html new file mode 100644 index 00000000..53fb5afd --- /dev/null +++ b/lms/lms/notification/certificate_request_creation/certificate_request_creation.html @@ -0,0 +1,5 @@ +{% set title = frappe.db.get_value("LMS Course", doc.course, "title") %} + +

{{ _("Hey ${0}").format(doc.member_name) }}

+

{{ _('Your evaluation for the course ${0} has been scheduled on ${1} at ${2}.').format(title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short")) }}

+

{{ _("Please prepare well and be on time for the evaluations.") }}

diff --git a/lms/lms/notification/certificate_request_creation/certificate_request_creation.json b/lms/lms/notification/certificate_request_creation/certificate_request_creation.json new file mode 100644 index 00000000..d32f77bb --- /dev/null +++ b/lms/lms/notification/certificate_request_creation/certificate_request_creation.json @@ -0,0 +1,27 @@ +{ + "attach_print": 0, + "channel": "Email", + "creation": "2022-06-03 11:02:34.579145", + "days_in_advance": 0, + "docstatus": 0, + "doctype": "Notification", + "document_type": "LMS Certificate Request", + "enabled": 1, + "event": "New", + "idx": 0, + "is_standard": 1, + "message": "{% set title = frappe.db.get_value(\"LMS Course\", doc.course, \"title\") %}\n

{{ _('Your evaluation for the course ${0} has been scheduled on ${1} at ${2}.').format(title, frappe.utils.format_date(doc.date, \"medium\"), frappe.utils.format_time(doc.start_time, \"short\")) }}

\n

{{ _(\"Please prepare well and be on time for the evaluations.\") }}

\n", + "modified": "2022-06-03 11:49:01.310656", + "modified_by": "Administrator", + "module": "LMS", + "name": "Certificate Request Creation", + "owner": "Administrator", + "recipients": [ + { + "receiver_by_document_field": "member" + } + ], + "send_system_notification": 0, + "send_to_all_assignees": 0, + "subject": "Your evaluation slot has been booked" +} \ No newline at end of file diff --git a/lms/lms/notification/certificate_request_creation/certificate_request_creation.md b/lms/lms/notification/certificate_request_creation/certificate_request_creation.md new file mode 100644 index 00000000..46f352a0 --- /dev/null +++ b/lms/lms/notification/certificate_request_creation/certificate_request_creation.md @@ -0,0 +1 @@ +

{{ _("Please prepare well and be on time for the evaluations.") }}

\ No newline at end of file diff --git a/lms/lms/notification/certificate_request_creation/certificate_request_creation.py b/lms/lms/notification/certificate_request_creation/certificate_request_creation.py new file mode 100644 index 00000000..e1ada619 --- /dev/null +++ b/lms/lms/notification/certificate_request_creation/certificate_request_creation.py @@ -0,0 +1,5 @@ +import frappe + +def get_context(context): + # do your magic here + pass diff --git a/lms/lms/notification/certificate_request_reminder/__init__.py b/lms/lms/notification/certificate_request_reminder/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.html b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.html new file mode 100644 index 00000000..53fb5afd --- /dev/null +++ b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.html @@ -0,0 +1,5 @@ +{% set title = frappe.db.get_value("LMS Course", doc.course, "title") %} + +

{{ _("Hey ${0}").format(doc.member_name) }}

+

{{ _('Your evaluation for the course ${0} has been scheduled on ${1} at ${2}.').format(title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short")) }}

+

{{ _("Please prepare well and be on time for the evaluations.") }}

diff --git a/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.json b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.json new file mode 100644 index 00000000..315cf445 --- /dev/null +++ b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.json @@ -0,0 +1,28 @@ +{ + "attach_print": 0, + "channel": "Email", + "creation": "2022-06-03 11:51:02.681803", + "date_changed": "date", + "days_in_advance": 1, + "docstatus": 0, + "doctype": "Notification", + "document_type": "LMS Certificate Request", + "enabled": 1, + "event": "Days Before", + "idx": 0, + "is_standard": 1, + "message": "{% set title = frappe.db.get_value(\"LMS Course\", doc.course, \"title\") %}\n

{{ _('Your evaluation for the course ${0} has been scheduled on ${1} at ${2}.').format(title, frappe.utils.format_date(doc.date, \"medium\"), frappe.utils.format_time(doc.start_time, \"short\")) }}

\n

{{ _(\"Please prepare well and be on time for the evaluations.\") }}

\n", + "modified": "2022-06-03 11:51:02.681803", + "modified_by": "Administrator", + "module": "LMS", + "name": "Certificate Request Reminder", + "owner": "Administrator", + "recipients": [ + { + "receiver_by_document_field": "member" + } + ], + "send_system_notification": 0, + "send_to_all_assignees": 0, + "subject": "Reminder for Certificate Evaluation" +} \ No newline at end of file diff --git a/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.md b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.md new file mode 100644 index 00000000..e8ff02cb --- /dev/null +++ b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.md @@ -0,0 +1,3 @@ +{% set title = frappe.db.get_value("LMS Course", doc.course, "title") %} +

{{ _('Your evaluation for the course ${0} has been scheduled on ${1} at ${2}.').format(title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short")) }}

+

{{ _("Please prepare well and be on time for the evaluations.") }}

diff --git a/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.py b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.py new file mode 100644 index 00000000..e1ada619 --- /dev/null +++ b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.py @@ -0,0 +1,5 @@ +import frappe + +def get_context(context): + # do your magic here + pass From 55a770f129f9ed71d6dfadfb260abdb5ff96b711 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Fri, 3 Jun 2022 13:36:50 +0530 Subject: [PATCH 5/7] fix: certificate request notification template --- .../certificate_request_creation.html | 4 ++-- .../certificate_request_reminder.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lms/lms/notification/certificate_request_creation/certificate_request_creation.html b/lms/lms/notification/certificate_request_creation/certificate_request_creation.html index 53fb5afd..7a22c938 100644 --- a/lms/lms/notification/certificate_request_creation/certificate_request_creation.html +++ b/lms/lms/notification/certificate_request_creation/certificate_request_creation.html @@ -1,5 +1,5 @@ {% set title = frappe.db.get_value("LMS Course", doc.course, "title") %} -

{{ _("Hey ${0}").format(doc.member_name) }}

-

{{ _('Your evaluation for the course ${0} has been scheduled on ${1} at ${2}.').format(title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short")) }}

+

{{ _("Hey {0}").format(doc.member_name) }}

+

{{ _('Your evaluation for the course {0} has been scheduled on {1} at {2}.').format(title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short")) }}

{{ _("Please prepare well and be on time for the evaluations.") }}

diff --git a/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.html b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.html index 53fb5afd..7a22c938 100644 --- a/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.html +++ b/lms/lms/notification/certificate_request_reminder/certificate_request_reminder.html @@ -1,5 +1,5 @@ {% set title = frappe.db.get_value("LMS Course", doc.course, "title") %} -

{{ _("Hey ${0}").format(doc.member_name) }}

-

{{ _('Your evaluation for the course ${0} has been scheduled on ${1} at ${2}.').format(title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short")) }}

+

{{ _("Hey {0}").format(doc.member_name) }}

+

{{ _('Your evaluation for the course {0} has been scheduled on {1} at {2}.').format(title, frappe.utils.format_date(doc.date, "medium"), frappe.utils.format_time(doc.start_time, "short")) }}

{{ _("Please prepare well and be on time for the evaluations.") }}

From 1f3806a7bdfc58c855dc9a8ea4c1a6bb0a994cd7 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Mon, 6 Jun 2022 11:15:06 +0530 Subject: [PATCH 6/7] fix: replaced some dialogs with alerts --- lms/hooks.py | 1 - lms/lms/md.py | 2 +- lms/lms/web_form/chapter/chapter.js | 5 ++- lms/lms/web_form/lesson/lesson.js | 7 +++-- lms/lms/web_form/profile/profile.json | 6 ++-- lms/lms/widgets/CourseOutline.html | 11 +++---- lms/public/css/style.css | 28 ++++++++--------- lms/public/js/common_functions.js | 17 ++++++----- lms/templates/quiz.html | 6 ++-- lms/www/batch/learn.html | 11 ++++--- lms/www/courses/course.js | 44 ++++++++++++++++----------- lms/www/jobs/job.js | 25 ++++++++------- 12 files changed, 89 insertions(+), 74 deletions(-) diff --git a/lms/hooks.py b/lms/hooks.py index 99d428cf..67affeb8 100644 --- a/lms/hooks.py +++ b/lms/hooks.py @@ -214,7 +214,6 @@ profile_mandatory_fields = [ "bio", "linkedin", "education", - "work_experience", "skill", "preferred_functions", "preferred_industries", diff --git a/lms/lms/md.py b/lms/lms/md.py index b02ed68f..8105c72f 100644 --- a/lms/lms/md.py +++ b/lms/lms/md.py @@ -105,7 +105,7 @@ def sanitize_html(html, macro): any broken tags. This makes sures that all those things are fixed before passing to the etree parser. """ - soup = BeautifulSoup(html, features="lxml") + soup = BeautifulSoup(html, features="html5lib") nodes = soup.body.children classname = "" if macro == "YouTubeVideo": diff --git a/lms/lms/web_form/chapter/chapter.js b/lms/lms/web_form/chapter/chapter.js index 6d710013..da98bb5e 100644 --- a/lms/lms/web_form/chapter/chapter.js +++ b/lms/lms/web_form/chapter/chapter.js @@ -1,6 +1,9 @@ frappe.ready(function() { frappe.web_form.after_save = () => { - frappe.msgprint(__("Chapter has been saved successfully. Go back to the course and add this chapter to the chapters table.")) + frappe.show_alert({ + message:__("Chapter has been saved successfully. Go back to the course and add this chapter to the chapters table."), + indicator:'green' + }, 3); setTimeout(() => { window.location.href = `/courses/${frappe.web_form.doc.course}`; }, 3000); diff --git a/lms/lms/web_form/lesson/lesson.js b/lms/lms/web_form/lesson/lesson.js index ad73a38c..82214a05 100644 --- a/lms/lms/web_form/lesson/lesson.js +++ b/lms/lms/web_form/lesson/lesson.js @@ -49,10 +49,13 @@ const show_upload_modal = () => { }; const show_success_message = () => { - frappe.msgprint(__(`Lesson has been saved successfully. Go back to the chapter and add this lesson to the lessons table.`)); + frappe.show_alert({ + message: __(`Lesson has been saved successfully. Go back to the chapter and add this lesson to the lessons table.`), + indicator:'green' + }, 3); setTimeout(() => { window.location.href = `/courses/${this.course}`; - }, 2000); + }, 3000); }; const add_file_upload_component = () => { diff --git a/lms/lms/web_form/profile/profile.json b/lms/lms/web_form/profile/profile.json index 70dcf10d..a0a78e8d 100644 --- a/lms/lms/web_form/profile/profile.json +++ b/lms/lms/web_form/profile/profile.json @@ -22,7 +22,7 @@ "is_standard": 1, "login_required": 1, "max_attachment_size": 0, - "modified": "2022-02-23 09:32:37.352930", + "modified": "2022-06-06 10:38:37.784113", "modified_by": "Administrator", "module": "LMS", "name": "profile", @@ -83,7 +83,7 @@ "max_length": 0, "max_value": 0, "read_only": 0, - "reqd": 0, + "reqd": 1, "show_in_filter": 0 }, { @@ -244,7 +244,7 @@ "max_value": 0, "options": "Work Experience", "read_only": 0, - "reqd": 1, + "reqd": 0, "show_in_filter": 0 }, { diff --git a/lms/lms/widgets/CourseOutline.html b/lms/lms/widgets/CourseOutline.html index 567b8010..0dd138d5 100644 --- a/lms/lms/widgets/CourseOutline.html +++ b/lms/lms/widgets/CourseOutline.html @@ -29,13 +29,12 @@ {% if membership or lesson.include_in_preview %} - + - {{ lesson.title }} - + {{ lesson.title }} {% if membership %} - + {% endif %} @@ -48,7 +47,7 @@ href="{{ get_lesson_url(course.name, lesson.number) }}{{course.query_parameter}}" data-course="{{ course.name }}"> - +
{{ lesson.title }}
@@ -57,7 +56,7 @@ {% else %}