From f2c14d09d46d0ad2e2f1c66740804f0bf28c381a Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Mon, 15 Apr 2024 12:10:11 +0530 Subject: [PATCH] feat: profile settings for roles --- frontend/src/pages/Profile.vue | 5 +- frontend/src/pages/ProfileEvaluator.vue | 2 + frontend/src/pages/ProfileSettings.vue | 97 ++++++++++++++++++- frontend/src/router.js | 5 + lms/install.py | 4 +- .../course_evaluator/course_evaluator.json | 4 +- .../lms_certificate_evaluation.json | 4 +- .../lms_certificate_request.json | 26 ++--- lms/lms/utils.py | 21 +++- lms/overrides/user.py | 1 + 10 files changed, 147 insertions(+), 22 deletions(-) create mode 100644 frontend/src/pages/ProfileEvaluator.vue diff --git a/frontend/src/pages/Profile.vue b/frontend/src/pages/Profile.vue index f5ad9448..e21277c3 100644 --- a/frontend/src/pages/Profile.vue +++ b/frontend/src/pages/Profile.vue @@ -116,7 +116,7 @@ const profile = createResource({ const setActiveTab = () => { let fragments = route.path.split('/') - let sections = ['certificates', 'settings'] + let sections = ['certificates', 'settings', 'evaluator'] sections.forEach((section) => { if (fragments.includes(section)) { activeTab.value = convertToTitleCase(section) @@ -131,6 +131,7 @@ watchEffect(() => { About: { name: 'ProfileAbout' }, Certificates: { name: 'ProfileCertificates' }, Settings: { name: 'ProfileSettings' }, + Evaluato: { name: 'ProfileEvaluator' }, }[activeTab.value] router.push(route) } @@ -147,6 +148,8 @@ const isSessionUser = () => { const getTabButtons = () => { let buttons = [{ label: 'About' }, { label: 'Certificates' }] if ($user.data?.is_moderator) buttons.push({ label: 'Settings' }) + if (isSessionUser() && $user.data?.is_evaluator) + buttons.push({ label: 'Evaluation Slots' }) return buttons } diff --git a/frontend/src/pages/ProfileEvaluator.vue b/frontend/src/pages/ProfileEvaluator.vue new file mode 100644 index 00000000..aff82f9f --- /dev/null +++ b/frontend/src/pages/ProfileEvaluator.vue @@ -0,0 +1,2 @@ + + diff --git a/frontend/src/pages/ProfileSettings.vue b/frontend/src/pages/ProfileSettings.vue index cc340bc4..46a17783 100644 --- a/frontend/src/pages/ProfileSettings.vue +++ b/frontend/src/pages/ProfileSettings.vue @@ -1 +1,96 @@ - + + diff --git a/frontend/src/router.js b/frontend/src/router.js index 6aea1b47..0b5a09ca 100644 --- a/frontend/src/router.js +++ b/frontend/src/router.js @@ -77,6 +77,11 @@ const routes = [ path: 'settings', component: () => import('@/pages/ProfileSettings.vue'), }, + { + name: 'ProfileEvaluator', + path: 'evaluator', + component: () => import('@/pages/ProfileEvaluator.vue'), + }, ], }, { diff --git a/lms/install.py b/lms/install.py index be100e99..55012729 100644 --- a/lms/install.py +++ b/lms/install.py @@ -90,11 +90,11 @@ def create_moderator_role(): def create_evaluator_role(): - if not frappe.db.exists("Role", "Class Evaluator"): + if not frappe.db.exists("Role", "Batch Evaluator"): role = frappe.new_doc("Role") role.update( { - "role_name": "Class Evaluator", + "role_name": "Batch Evaluator", "home_page": "", "desk_access": 0, } diff --git a/lms/lms/doctype/course_evaluator/course_evaluator.json b/lms/lms/doctype/course_evaluator/course_evaluator.json index cac4f195..72ecf771 100644 --- a/lms/lms/doctype/course_evaluator/course_evaluator.json +++ b/lms/lms/doctype/course_evaluator/course_evaluator.json @@ -27,7 +27,7 @@ ], "index_web_pages_for_search": 1, "links": [], - "modified": "2023-07-13 11:30:22.641076", + "modified": "2024-04-15 11:21:52.182338", "modified_by": "Administrator", "module": "LMS", "name": "Course Evaluator", @@ -66,7 +66,7 @@ "print": 1, "read": 1, "report": 1, - "role": "Class Evaluator", + "role": "Batch Evaluator", "share": 1, "write": 1 } diff --git a/lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.json b/lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.json index d698fe17..1fe5d013 100644 --- a/lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.json +++ b/lms/lms/doctype/lms_certificate_evaluation/lms_certificate_evaluation.json @@ -107,7 +107,7 @@ ], "index_web_pages_for_search": 1, "links": [], - "modified": "2023-12-18 20:03:27.040073", + "modified": "2024-04-15 11:22:43.189908", "modified_by": "Administrator", "module": "LMS", "name": "LMS Certificate Evaluation", @@ -133,7 +133,7 @@ "print": 1, "read": 1, "report": 1, - "role": "Class Evaluator", + "role": "Batch Evaluator", "share": 1, "write": 1 } diff --git a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json index 5d3bbf4d..e4ec298b 100644 --- a/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json +++ b/lms/lms/doctype/lms_certificate_request/lms_certificate_request.json @@ -109,7 +109,7 @@ ], "index_web_pages_for_search": 1, "links": [], - "modified": "2024-01-09 10:05:13.918890", + "modified": "2024-04-15 11:23:03.933035", "modified_by": "Administrator", "module": "LMS", "name": "LMS Certificate Request", @@ -128,18 +128,6 @@ "share": 1, "write": 1 }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Class Evaluator", - "share": 1, - "write": 1 - }, { "create": 1, "delete": 1, @@ -161,6 +149,18 @@ "report": 1, "role": "LMS Student", "share": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Batch Evaluator", + "share": 1, + "write": 1 } ], "sort_field": "modified", diff --git a/lms/lms/utils.py b/lms/lms/utils.py index 1412a3df..8db01e31 100644 --- a/lms/lms/utils.py +++ b/lms/lms/utils.py @@ -577,7 +577,15 @@ def has_course_moderator_role(member=None): def has_course_evaluator_role(member=None): return frappe.db.get_value( "Has Role", - {"parent": member or frappe.session.user, "role": "Class Evaluator"}, + {"parent": member or frappe.session.user, "role": "Batch Evaluator"}, + "name", + ) + + +def has_student_role(member=None): + return frappe.db.get_value( + "Has Role", + {"parent": member or frappe.session.user, "role": "LMS Student"}, "name", ) @@ -1780,3 +1788,14 @@ def get_lesson_creation_details(course, chapter, lesson): ), "lesson": lesson_details if lesson_name else None, } + + +@frappe.whitelist() +def get_roles(name): + frappe.only_for("Moderator") + return { + "moderator": has_course_moderator_role(name), + "course_creator": has_course_instructor_role(name), + "class_evaluator": has_course_evaluator_role(name), + "lms_student": has_student_role(name), + } diff --git a/lms/overrides/user.py b/lms/overrides/user.py index 722baacf..f667c18d 100644 --- a/lms/overrides/user.py +++ b/lms/overrides/user.py @@ -356,6 +356,7 @@ def get_users(or_filters, start, page_length): @frappe.whitelist() def save_role(user, role, value): + frappe.only_for("Moderator") if cint(value): doc = frappe.get_doc( {