@@ -129,3 +129,30 @@ def undo_reject_cohort_join_request(join_request):
|
|||||||
r.status = "Pending"
|
r.status = "Pending"
|
||||||
r.save(ignore_permissions=True)
|
r.save(ignore_permissions=True)
|
||||||
return {"ok": True}
|
return {"ok": True}
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def add_mentor_to_subgroup(subgroup, email):
|
||||||
|
try:
|
||||||
|
sg = frappe.get_doc("Cohort Subgroup", subgroup)
|
||||||
|
except frappe.DoesNotExistError:
|
||||||
|
return {
|
||||||
|
"ok": False,
|
||||||
|
"error": f"Invalid subgroup: {subgroup}"
|
||||||
|
}
|
||||||
|
|
||||||
|
if not sg.get_cohort().is_admin(frappe.session.user) and "System Manager" not in frappe.get_roles():
|
||||||
|
return {
|
||||||
|
"ok": False,
|
||||||
|
"error": "Permission Deined"
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
user = frappe.get_doc("User", email)
|
||||||
|
except frappe.DoesNotExistError:
|
||||||
|
return {
|
||||||
|
"ok": False,
|
||||||
|
"error": f"Invalid user: {email}"
|
||||||
|
}
|
||||||
|
|
||||||
|
sg.add_mentor(email)
|
||||||
|
return {"ok": True}
|
||||||
|
|||||||
@@ -79,5 +79,17 @@ class CohortSubgroup(Document):
|
|||||||
def get_cohort(self):
|
def get_cohort(self):
|
||||||
return frappe.get_doc("Cohort", self.cohort)
|
return frappe.get_doc("Cohort", self.cohort)
|
||||||
|
|
||||||
|
def add_mentor(self, email):
|
||||||
|
d = {
|
||||||
|
"doctype": "Cohort Mentor",
|
||||||
|
"subgroup": self.name,
|
||||||
|
"cohort": self.cohort,
|
||||||
|
"email": email
|
||||||
|
}
|
||||||
|
if frappe.db.exists(d):
|
||||||
|
return
|
||||||
|
doc = frappe.get_doc(d)
|
||||||
|
doc.insert(ignore_permissions=True)
|
||||||
|
|
||||||
#def after_doctype_insert():
|
#def after_doctype_insert():
|
||||||
# frappe.db.add_unique("Cohort Subgroup", ("cohort", "slug"))
|
# frappe.db.add_unique("Cohort Subgroup", ("cohort", "slug"))
|
||||||
|
|||||||
@@ -2,13 +2,19 @@
|
|||||||
{% block title %} Subgroup {{subgroup.title}} - {{ course.title }} {% endblock %}
|
{% block title %} Subgroup {{subgroup.title}} - {{ course.title }} {% endblock %}
|
||||||
|
|
||||||
{% block page_content %}
|
{% block page_content %}
|
||||||
<h2>{{subgroup.title}} <span class="badge badge-secondary">Subgroup</span></h2>
|
<h2 id="page-title"
|
||||||
|
data-subgroup="{{subgroup.name}}"
|
||||||
|
data-title="{{subgroup.title}}"
|
||||||
|
>{{subgroup.title}} <span class="badge badge-secondary">Subgroup</span></h2>
|
||||||
|
|
||||||
<ul class="nav nav-tabs">
|
<ul class="nav nav-tabs">
|
||||||
{{ render_navitem("Mentors", "/mentors", stats.mentors, page=="mentors")}}
|
{{ render_navitem("Mentors", "/mentors", stats.mentors, page=="mentors")}}
|
||||||
{{ render_navitem("Students", "/students", stats.students, page=="students")}}
|
{{ render_navitem("Students", "/students", stats.students, page=="students")}}
|
||||||
|
{% if is_mentor or is_admin %}
|
||||||
|
{{ render_navitem("Join Requests", "/join-requests", stats.join_requests, page=="join-requests")}}
|
||||||
|
{% endif %}
|
||||||
{% if is_admin %}
|
{% if is_admin %}
|
||||||
{{ render_navitem("Admin", "/admin", stats.join_requests, page=="admin")}}
|
{{ render_navitem("Admin", "/admin", -1, page=="admin")}}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
<div class="my-5">
|
<div class="my-5">
|
||||||
@@ -18,15 +24,24 @@
|
|||||||
{{ render_mentors() }}
|
{{ render_mentors() }}
|
||||||
{% elif page == "students" %}
|
{% elif page == "students" %}
|
||||||
{{ render_students() }}
|
{{ render_students() }}
|
||||||
{% elif page == "admin" %}
|
{% elif page == "join-requests" %}
|
||||||
{{ render_join_requests() }}
|
{{ render_join_requests() }}
|
||||||
|
{% elif page == "admin" %}
|
||||||
|
{{ render_admin() }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% macro render_info() %}
|
{% macro render_admin() %}
|
||||||
{% if is_admin %}
|
<div style="background: white; padding: 20px;">
|
||||||
{% endif %}
|
<h5>Add a new mentor</h5>
|
||||||
|
<form id="add-mentor-form">
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="email" class="form-control" id="mentor-email" aria-describedby="emailHelp" placeholder="E-mail address">
|
||||||
|
</div>
|
||||||
|
<button type="button" class="btn btn-primary" id="add-mentor">Add Mentor</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
|
||||||
{% macro render_mentors() %}
|
{% macro render_mentors() %}
|
||||||
@@ -202,6 +217,24 @@ $(function() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$("#add-mentor").click(function() {
|
||||||
|
var subgroup = $("#page-title").data("subgroup");
|
||||||
|
var title = $("#page-title").data("title");
|
||||||
|
var email = $("#mentor-email").val();
|
||||||
|
frappe.call("school.lms.api.add_mentor_to_subgroup", {
|
||||||
|
subgroup: subgroup,
|
||||||
|
email: email
|
||||||
|
})
|
||||||
|
.then(r => {
|
||||||
|
if (r.message.ok) {
|
||||||
|
frappe.msgprint(`Successfully added ${email} as mentor to ${title}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
frappe.msgprint(r.message.error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -13,9 +13,12 @@ def get_context(context):
|
|||||||
return
|
return
|
||||||
|
|
||||||
page = frappe.form_dict.get("page")
|
page = frappe.form_dict.get("page")
|
||||||
is_admin = subgroup.is_manager(frappe.session.user) or "System Manager" in frappe.get_roles()
|
is_mentor = subgroup.is_mentor(frappe.session.user)
|
||||||
|
is_admin = cohort.is_admin(frappe.session.user) or "System Manager" in frappe.get_roles()
|
||||||
|
|
||||||
if page not in ["mentors", "students", "admin"] or (page == "admin" and not is_admin):
|
if (page not in ["mentors", "students", "join-requests", "admin"]
|
||||||
|
or (page == "join-requests" and not (is_mentor or is_admin))
|
||||||
|
or (page == "admin" and not is_admin)):
|
||||||
frappe.local.flags.redirect_location = subgroup.get_url() + "/mentors"
|
frappe.local.flags.redirect_location = subgroup.get_url() + "/mentors"
|
||||||
raise frappe.Redirect
|
raise frappe.Redirect
|
||||||
|
|
||||||
@@ -30,6 +33,7 @@ def get_context(context):
|
|||||||
context.stats = get_stats(subgroup)
|
context.stats = get_stats(subgroup)
|
||||||
context.page = page
|
context.page = page
|
||||||
context.is_admin = is_admin
|
context.is_admin = is_admin
|
||||||
|
context.is_mentor = is_mentor
|
||||||
|
|
||||||
def get_stats(subgroup):
|
def get_stats(subgroup):
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user