fix: api permissions

This commit is contained in:
Jannat Patel
2026-01-29 21:42:20 +05:30
parent dc06ad6b22
commit 015f903d68
7 changed files with 1 additions and 268 deletions
@@ -182,8 +182,3 @@ def get_assignment_progress(lesson):
):
return False
return True
@frappe.whitelist()
def get_lesson_info(chapter):
return frappe.db.get_value("Course Chapter", chapter, "course")
@@ -231,32 +231,9 @@ def update_meeting_details(eval, event, calendar):
frappe.db.set_value("LMS Certificate Request", eval.name, "google_meet_link", event.google_meet_link)
@frappe.whitelist()
def create_certificate_request(course, date, day, start_time, end_time, batch_name=None):
is_member = frappe.db.exists(
{"doctype": "LMS Enrollment", "course": course, "member": frappe.session.user}
)
if not is_member:
return
eval = frappe.new_doc("LMS Certificate Request")
eval.update(
{
"course": course,
"evaluator": get_evaluator(course, batch_name),
"member": frappe.session.user,
"date": date,
"day": day,
"start_time": start_time,
"end_time": end_time,
"batch_name": batch_name,
}
)
eval.save(ignore_permissions=True)
@frappe.whitelist()
def create_lms_certificate_evaluation(source_name, target_doc=None):
frappe.only_for(["Moderator", "Batch Evaluator", "System Manager"])
doc = get_mapped_doc(
"LMS Certificate Request",
source_name,
@@ -1,7 +0,0 @@
// Copyright (c) 2021, FOSS United and contributors
// For license information, please see license.txt
frappe.ui.form.on("LMS Mentor Request", {
// refresh: function(frm) {
// }
});
@@ -1,87 +0,0 @@
{
"actions": [],
"creation": "2021-04-18 11:48:02.635688",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"member",
"course",
"reviewed_by",
"column_break_3",
"member_name",
"status",
"comments"
],
"fields": [
{
"fieldname": "member",
"fieldtype": "Link",
"in_standard_filter": 1,
"label": "Member",
"options": "User"
},
{
"fieldname": "course",
"fieldtype": "Link",
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Course",
"options": "LMS Course"
},
{
"fieldname": "column_break_3",
"fieldtype": "Column Break"
},
{
"fetch_from": "member.full_name",
"fieldname": "member_name",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Member Name"
},
{
"fieldname": "status",
"fieldtype": "Select",
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Status",
"options": "Pending\nApproved\nRejected\nWithdrawn"
},
{
"fieldname": "reviewed_by",
"fieldtype": "Link",
"label": "Reviewed By",
"options": "User"
},
{
"fieldname": "comments",
"fieldtype": "Small Text",
"label": "Comments"
}
],
"index_web_pages_for_search": 1,
"links": [],
"modified": "2021-05-21 11:49:12.543502",
"modified_by": "Administrator",
"module": "LMS",
"name": "LMS Mentor Request",
"owner": "Administrator",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
"share": 1,
"write": 1
}
],
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1
}
@@ -1,136 +0,0 @@
# Copyright (c) 2021, FOSS United and contributors
# For license information, please see license.txt
import frappe
from frappe import _
from frappe.model.document import Document
class LMSMentorRequest(Document):
def on_update(self):
if self.has_value_changed("status"):
if self.status == "Approved":
self.create_course_mentor_mapping()
if self.status != "Pending":
self.send_status_change_email()
def create_course_mentor_mapping(self):
mapping = frappe.get_doc(
{
"doctype": "LMS Course Mentor Mapping",
"mentor": self.member,
"course": self.course,
}
)
mapping.save()
def send_creation_email(self):
email_template = self.get_email_template("mentor_request_creation")
if not email_template:
return
course_details = frappe.db.get_value(
"LMS Course", self.course, ["owner", "slug", "title"], as_dict=True
)
message = frappe.render_template(
email_template.response,
{
"member_name": frappe.db.get_value("User", frappe.session.user, "full_name"),
"course_url": "/lms/courses/" + course_details.slug,
"course": course_details.title,
},
)
email_args = {
"recipients": [frappe.session.user, course_details.owner],
"subject": email_template.subject,
"header": email_template.subject,
"message": message,
}
frappe.enqueue(method=frappe.sendmail, queue="short", timeout=300, is_async=True, **email_args)
def send_status_change_email(self):
email_template = self.get_email_template("mentor_request_status_update")
if not email_template:
return
course_details = frappe.db.get_value("LMS Course", self.course, ["owner", "title"], as_dict=True)
message = frappe.render_template(
email_template.response,
{
"member_name": self.member_name,
"status": self.status,
"course": course_details.title,
},
)
if self.status == "Approved" or self.status == "Rejected":
email_args = {
"recipients": self.member,
"cc": [course_details.owner, self.reviewed_by],
"subject": email_template.subject,
"header": email_template.subject,
"message": message,
}
frappe.enqueue(method=frappe.sendmail, queue="short", timeout=300, is_async=True, **email_args)
elif self.status == "Withdrawn":
email_args = {
"recipients": [self.member, course_details.owner],
"subject": email_template.subject,
"header": email_template.subject,
"message": message,
}
frappe.enqueue(method=frappe.sendmail, queue="short", timeout=300, is_async=True, **email_args)
def get_email_template(self, template_name):
template = frappe.db.get_single_value("LMS Settings", template_name)
if template:
return frappe.get_doc("Email Template", template)
@frappe.whitelist()
def has_requested(course):
return frappe.db.count(
"LMS Mentor Request",
filters={
"member": frappe.session.user,
"course": course,
"status": ["in", ("Pending", "Approved")],
},
)
@frappe.whitelist()
def create_request(course):
if not has_requested(course):
request = frappe.get_doc(
{
"doctype": "LMS Mentor Request",
"member": frappe.session.user,
"course": course,
"status": "Pending",
}
)
request.save(ignore_permissions=True)
request.send_creation_email()
return "OK"
else:
return "Already Applied"
@frappe.whitelist()
def cancel_request(course):
request = frappe.get_doc(
"LMS Mentor Request",
{
"member": frappe.session.user,
"course": course,
"status": ["in", ("Pending", "Approved")],
},
)
request.status = "Withdrawn"
request.save(ignore_permissions=True)
return "OK"
@@ -1,9 +0,0 @@
# Copyright (c) 2021, FOSS United and Contributors
# See license.txt
# import frappe
import unittest
class TestLMSMentorRequest(unittest.TestCase):
pass