From 8a74f495e702d1f4f57e51faaa66b9544c43b603 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Wed, 12 Jun 2024 10:32:57 +0530 Subject: [PATCH 1/5] fix: event meeting generation --- frappe-ui | 2 +- .../lms_certificate_request/lms_certificate_request.js | 10 ++++++++++ .../lms_certificate_request/lms_certificate_request.py | 5 +++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/frappe-ui b/frappe-ui index 38728b80..aa44431c 160000 --- a/frappe-ui +++ b/frappe-ui @@ -1 +1 @@ -Subproject commit 38728b80aaf0cf0a74b2f10e778363c9308c3a1e +Subproject commit aa44431c185b1e4563f2ebf6af380c7743d2cd4c diff --git a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.js b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.js index cb024880..65ed42db 100644 --- a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.js +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.js @@ -14,6 +14,16 @@ frappe.ui.form.on("LMS Certificate Request", { } ); } + if (!frm.google_meet_link) { + frm.add_custom_button(__("Generate Google Meet Link"), () => { + frappe.call({ + method: "lms.lms.doctype.lms_certificate_request.lms_certificate_request.setup_calendar_event", + args: { + eval: frm.doc, + }, + }); + }); + } }, onload: function (frm) { 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 2484ba24..94016b45 100644 --- a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py @@ -109,16 +109,17 @@ class LMSCertificateRequest(Document): def schedule_evals(): if frappe.db.get_single_value("LMS Settings", "send_calendar_invite_for_evaluations"): - one_hour_ago = add_to_date(get_datetime(), hours=-1) + timelapse = add_to_date(get_datetime(), hours=-5) evals = frappe.get_all( "LMS Certificate Request", - {"creation": [">=", one_hour_ago], "google_meet_link": ["is", "not set"]}, + {"creation": [">=", timelapse], "google_meet_link": ["is", "not set"]}, ["name", "member", "member_name", "evaluator", "date", "start_time", "end_time"], ) for eval in evals: setup_calendar_event(eval) +@frappe.whitelist() def setup_calendar_event(eval): calendar = frappe.db.get_value( "Google Calendar", {"user": eval.evaluator, "enable": 1}, "name" From 479ff037c61e09d66fd0cf5f50120e5e6d458db8 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Wed, 12 Jun 2024 10:42:47 +0530 Subject: [PATCH 2/5] fix: convert eval string to dict --- .../lms_certificate_request/lms_certificate_request.py | 4 ++++ 1 file changed, 4 insertions(+) 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 94016b45..4add3de3 100644 --- a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.py @@ -15,6 +15,7 @@ from frappe.utils import ( get_time, ) from lms.lms.utils import get_evaluator +import json class LMSCertificateRequest(Document): @@ -121,6 +122,9 @@ def schedule_evals(): @frappe.whitelist() def setup_calendar_event(eval): + if isinstance(eval, str): + eval = frappe._dict(json.loads(eval)) + calendar = frappe.db.get_value( "Google Calendar", {"user": eval.evaluator, "enable": 1}, "name" ) From 77433ebb7cea1aff7d999e08de4d2f56f5734557 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Wed, 12 Jun 2024 11:44:14 +0530 Subject: [PATCH 3/5] fix: better validation message on course creation --- frontend/src/components/Controls/IconPicker.vue | 7 +------ frontend/src/pages/CreateCourse.vue | 2 +- .../lms_certificate_request/lms_certificate_request.js | 2 +- lms/public/frontend/index.html | 6 +++--- 4 files changed, 6 insertions(+), 11 deletions(-) diff --git a/frontend/src/components/Controls/IconPicker.vue b/frontend/src/components/Controls/IconPicker.vue index 6d1297c7..9efdc006 100644 --- a/frontend/src/components/Controls/IconPicker.vue +++ b/frontend/src/components/Controls/IconPicker.vue @@ -60,7 +60,7 @@ const iconQuery = ref('') const selectedIcon = ref('') const search = ref(null) const emit = defineEmits(['update:modelValue', 'change']) -console.log(icons) + const iconArray = ref( Object.keys(icons) .sort(() => 0.5 - Math.random()) @@ -84,7 +84,6 @@ const props = defineProps({ onMounted(() => { selectedIcon.value = props.modelValue - console.log(search.value) }) const setIcon = (icon, close) => { @@ -111,9 +110,5 @@ const filteredIcons = computed(() => { const openPopover = (togglePopover) => { togglePopover() - nextTick(() => { - /* search.value.focus() */ - console.log(search.value.children) - }) } diff --git a/frontend/src/pages/CreateCourse.vue b/frontend/src/pages/CreateCourse.vue index ae5caddb..d7cadc14 100644 --- a/frontend/src/pages/CreateCourse.vue +++ b/frontend/src/pages/CreateCourse.vue @@ -377,7 +377,7 @@ const submitCourse = () => { }) }, onError(err) { - showToast(err) + showToast('Error', err.messages?.[0] || err, 'x') }, }) } diff --git a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.js b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.js index 65ed42db..f221d0c0 100644 --- a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.js +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.js @@ -14,7 +14,7 @@ frappe.ui.form.on("LMS Certificate Request", { } ); } - if (!frm.google_meet_link) { + if (!frm.doc.google_meet_link) { frm.add_custom_button(__("Generate Google Meet Link"), () => { frappe.call({ method: "lms.lms.doctype.lms_certificate_request.lms_certificate_request.setup_calendar_event", diff --git a/lms/public/frontend/index.html b/lms/public/frontend/index.html index 1385335c..752a899c 100644 --- a/lms/public/frontend/index.html +++ b/lms/public/frontend/index.html @@ -15,10 +15,10 @@ - - + + - +
From a99c41a07b831a38e46b9d1e3261a6f73b9c7d46 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Thu, 13 Jun 2024 15:34:57 +0530 Subject: [PATCH 4/5] fix: misc changes --- frontend/src/pages/CreateLesson.vue | 10 +----- frontend/src/pages/Lesson.vue | 47 ++++++++++++++++++++++------- frontend/src/pages/Profile.vue | 21 +++++++++---- frontend/src/pages/ProfileAbout.vue | 20 +++++++----- lms/public/frontend/index.html | 2 +- lms/www/lms.py | 21 +++++++++++++ 6 files changed, 87 insertions(+), 34 deletions(-) diff --git a/frontend/src/pages/CreateLesson.vue b/frontend/src/pages/CreateLesson.vue index da5059ae..42c9fe85 100644 --- a/frontend/src/pages/CreateLesson.vue +++ b/frontend/src/pages/CreateLesson.vue @@ -69,26 +69,18 @@
+ diff --git a/lms/www/lms.py b/lms/www/lms.py index 47b81ddb..4f92c88f 100644 --- a/lms/www/lms.py +++ b/lms/www/lms.py @@ -1,6 +1,7 @@ import frappe from frappe.utils.telemetry import capture from frappe import _ +from bs4 import BeautifulSoup import re no_cache = 1 @@ -79,6 +80,22 @@ def get_meta(app_path): "link": f"/batches/details/{batch_name}", } + if re.match(r"^batches/.*$", app_path): + batch_name = app_path.split("/")[1] + batch = frappe.db.get_value( + "LMS Batch", + batch_name, + ["title", "meta_image", "description", "category", "medium"], + as_dict=True, + ) + return { + "title": batch.title, + "image": batch.meta_image, + "description": batch.description, + "keywords": f"{batch.category} {batch.medium}", + "link": f"/batches/{batch_name}", + } + if app_path == "job-openings": return { "title": _("Job Openings"), @@ -123,6 +140,10 @@ def get_meta(app_path): ["full_name", "user_image", "bio"], as_dict=True, ) + + soup = BeautifulSoup(user.bio, "html.parser") + user.bio = soup.get_text() + return { "title": user.full_name, "image": user.user_image, From 965bdd789024103f3d863d9b466d2c8c1be64c4b Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Fri, 14 Jun 2024 09:48:22 +0530 Subject: [PATCH 5/5] fix: hide discussions is lesson has quiz --- frontend/src/pages/Lesson.vue | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/frontend/src/pages/Lesson.vue b/frontend/src/pages/Lesson.vue index a265eae0..471d3b2a 100644 --- a/frontend/src/pages/Lesson.vue +++ b/frontend/src/pages/Lesson.vue @@ -145,7 +145,6 @@ />
- {{ allowDiscussions }} { checkIfDiscussionsAllowed() }) - console.log(editor.value) - console.log(data.body) + if (!editor.value && data.body) { const quizRegex = /\{\{ Quiz\(".*"\) \}\}/ const hasQuiz = quizRegex.test(data.body) - console.log(hasQuiz) if (!hasQuiz) allowDiscussions.value = true } }, @@ -308,6 +304,7 @@ watch( if (newChapterNumber || newLessonNumber) { editor.value = null instructorEditor.value = null + allowDiscussions.value = false lesson.submit({ chapter: newChapterNumber, lesson: newLessonNumber, @@ -318,7 +315,6 @@ watch( const checkIfDiscussionsAllowed = () => { let quizPresent = false - console.log(lesson.data?.content) JSON.parse(lesson.data?.content)?.blocks?.forEach((block) => { if (block.type === 'quiz') quizPresent = true }) @@ -330,7 +326,6 @@ const checkIfDiscussionsAllowed = () => { user.data?.is_instructor) ) allowDiscussions.value = true - else allowDiscussions.value = false } const allowEdit = () => {