feat: added custom pages at subgroup level
This commit is contained in:
@@ -37,10 +37,17 @@ class Cohort(Document):
|
|||||||
filters = {"cohort": self.name, **kw}
|
filters = {"cohort": self.name, **kw}
|
||||||
return frappe.db.count(doctype, filters=filters)
|
return frappe.db.count(doctype, filters=filters)
|
||||||
|
|
||||||
def get_page_template(self, slug):
|
def get_page_template(self, slug, scope=None):
|
||||||
|
p = self.get_page(slug, scope=scope)
|
||||||
|
return p and p.get_template_html()
|
||||||
|
|
||||||
|
def get_page(self, slug, scope=None):
|
||||||
for p in self.pages:
|
for p in self.pages:
|
||||||
if p.slug == slug:
|
if p.slug == slug and scope in [p.scope, None]:
|
||||||
return p.get_template_html()
|
return p
|
||||||
|
|
||||||
|
def get_pages(self, scope=None):
|
||||||
|
return [p for p in self.pages if scope in [p.scope, None]]
|
||||||
|
|
||||||
def get_stats(self):
|
def get_stats(self):
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
<ul class="nav nav-tabs">
|
<ul class="nav nav-tabs">
|
||||||
{% set num_subgroups = cohort.get_subgroups() | length %}
|
{% set num_subgroups = cohort.get_subgroups() | length %}
|
||||||
{{ render_navitem("Subgroups", "", page=page, count=num_subgroups) }}
|
{{ render_navitem("Subgroups", "", page=page, count=num_subgroups) }}
|
||||||
{% for p in cohort.pages %}
|
{% for p in cohort.get_pages(scope="Cohort") %}
|
||||||
{{ render_navitem(p.title, p.slug, page=page) }}
|
{{ render_navitem(p.title, p.slug, page=page) }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -27,5 +27,5 @@ def get_context(context):
|
|||||||
|
|
||||||
# Function to render to custom page given the slug
|
# Function to render to custom page given the slug
|
||||||
context.render_page = lambda page: frappe.render_template(
|
context.render_page = lambda page: frappe.render_template(
|
||||||
cohort.get_page_template(page),
|
cohort.get_page_template(page, scope="Cohort"),
|
||||||
context)
|
context)
|
||||||
|
|||||||
@@ -12,6 +12,10 @@
|
|||||||
{{ render_navitem("Students", "/students", stats.students, page=="students")}}
|
{{ render_navitem("Students", "/students", stats.students, page=="students")}}
|
||||||
{% if is_mentor or is_admin %}
|
{% if is_mentor or is_admin %}
|
||||||
{{ render_navitem("Join Requests", "/join-requests", stats.join_requests, page=="join-requests")}}
|
{{ render_navitem("Join Requests", "/join-requests", stats.join_requests, page=="join-requests")}}
|
||||||
|
|
||||||
|
{% for p in cohort.get_pages(scope="Subgroup") %}
|
||||||
|
{{ render_navitem(p.title, "/" + p.slug, -1, page==p.slug) }}
|
||||||
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if is_admin %}
|
{% if is_admin %}
|
||||||
{{ render_navitem("Admin", "/admin", -1, page=="admin")}}
|
{{ render_navitem("Admin", "/admin", -1, page=="admin")}}
|
||||||
@@ -28,6 +32,8 @@
|
|||||||
{{ render_join_requests() }}
|
{{ render_join_requests() }}
|
||||||
{% elif page == "admin" %}
|
{% elif page == "admin" %}
|
||||||
{{ render_admin() }}
|
{{ render_admin() }}
|
||||||
|
{% else %}
|
||||||
|
{{ render_page(page) }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -16,9 +16,24 @@ def get_context(context):
|
|||||||
is_mentor = subgroup.is_mentor(frappe.session.user)
|
is_mentor = subgroup.is_mentor(frappe.session.user)
|
||||||
is_admin = cohort.is_admin(frappe.session.user) or "System Manager" in frappe.get_roles()
|
is_admin = cohort.is_admin(frappe.session.user) or "System Manager" in frappe.get_roles()
|
||||||
|
|
||||||
if (page not in ["mentors", "students", "join-requests", "admin"]
|
if is_admin:
|
||||||
or (page == "join-requests" and not (is_mentor or is_admin))
|
role = "Admin"
|
||||||
or (page == "admin" and not is_admin)):
|
elif is_mentor:
|
||||||
|
role = "Mentor"
|
||||||
|
else:
|
||||||
|
role = "Public"
|
||||||
|
|
||||||
|
pages = [
|
||||||
|
("mentors", ["Admin", "Mentor", "Public"]),
|
||||||
|
("students", ["Admin", "Mentor", "Public"]),
|
||||||
|
("join-requests", ["Admin", "Mentor"]),
|
||||||
|
("admin", ["Admin"])
|
||||||
|
]
|
||||||
|
pages += [(p.slug, ["Admin", "Mentor"]) for p in cohort.get_pages(scope="Subgroup")]
|
||||||
|
|
||||||
|
page_names = [p for p, roles in pages if role in roles]
|
||||||
|
|
||||||
|
if page not in page_names:
|
||||||
frappe.local.flags.redirect_location = subgroup.get_url() + "/mentors"
|
frappe.local.flags.redirect_location = subgroup.get_url() + "/mentors"
|
||||||
raise frappe.Redirect
|
raise frappe.Redirect
|
||||||
|
|
||||||
@@ -35,9 +50,17 @@ def get_context(context):
|
|||||||
context.is_admin = is_admin
|
context.is_admin = is_admin
|
||||||
context.is_mentor = is_mentor
|
context.is_mentor = is_mentor
|
||||||
|
|
||||||
|
# Function to render to custom page given the slug
|
||||||
|
context.render_page = lambda page: frappe.render_template(
|
||||||
|
cohort.get_page_template(page),
|
||||||
|
context)
|
||||||
|
|
||||||
def get_stats(subgroup):
|
def get_stats(subgroup):
|
||||||
return {
|
return {
|
||||||
"join_requests": len(subgroup.get_join_requests()),
|
"join_requests": len(subgroup.get_join_requests()),
|
||||||
"students": len(subgroup.get_students()),
|
"students": len(subgroup.get_students()),
|
||||||
"mentors": len(subgroup.get_mentors())
|
"mentors": len(subgroup.get_mentors())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def has_page(cohort, page):
|
||||||
|
return cohort.get_page(page, scope="Subgroup")
|
||||||
|
|||||||
Reference in New Issue
Block a user