Merge pull request #24490 from edx/tuchfarber/use_demographics_api_for_banner
Use new demographics API for banner in .org theme
This commit is contained in:
@@ -785,14 +785,6 @@ def student_dashboard(request):
|
||||
enr for enr in course_enrollments if entitlement.enrollment_course_run.course_id != enr.course_id
|
||||
]
|
||||
|
||||
# Collect all program types the user is enrolled in
|
||||
enrolled_program_types = []
|
||||
if getattr(settings, 'ENABLE_DEMOGRAPHICS_COLLECTION', False):
|
||||
enrolled_program_types = {
|
||||
_program.get('type_attrs', {}).get('slug')
|
||||
for _program in meter.engaged_programs
|
||||
if _program.get('type_attrs', {}).get('slug') is not None
|
||||
}
|
||||
context = {
|
||||
'urls': urls,
|
||||
'programs_data': programs_data,
|
||||
@@ -842,7 +834,6 @@ def student_dashboard(request):
|
||||
'recovery_email_message': recovery_email_message,
|
||||
'recovery_email_activation_message': recovery_email_activation_message,
|
||||
'show_load_all_courses_link': show_load_all_courses_link(user, course_limit, course_enrollments),
|
||||
'enrolled_program_types': enrolled_program_types,
|
||||
# TODO START: clean up as part of REVEM-199 (START)
|
||||
'course_info': get_dashboard_course_info(user, course_enrollments),
|
||||
# TODO START: clean up as part of REVEM-199 (END)
|
||||
|
||||
@@ -6,7 +6,15 @@ from openedx.features.enterprise_support.utils import is_enterprise_learner
|
||||
from openedx.core.djangoapps.programs.utils import is_user_enrolled_in_program_type
|
||||
|
||||
|
||||
def show_user_demographics(user):
|
||||
# Is the learner enrolled in MicroBachelors Program or is the learner an Enterprise learner?
|
||||
is_user_in_microbachelors_program = is_user_enrolled_in_program_type(user, "microbachelors")
|
||||
def show_user_demographics(user, enrollments=None, entitlements=None):
|
||||
"""
|
||||
Check if the user should be shown demographics collection fields. Currently limited
|
||||
to MicroBachlors Programs' learners who aren't part of an enterprise.
|
||||
"""
|
||||
is_user_in_microbachelors_program = is_user_enrolled_in_program_type(
|
||||
user,
|
||||
"microbachelors",
|
||||
enrollments=enrollments,
|
||||
entitlements=entitlements
|
||||
)
|
||||
return is_user_in_microbachelors_program and not is_enterprise_learner(user)
|
||||
|
||||
@@ -477,6 +477,23 @@ def get_user_roles(username):
|
||||
return _data_api().get_user_roles(username)
|
||||
|
||||
|
||||
def serialize_enrollments(enrollments):
|
||||
"""
|
||||
Takes a list of CourseEnrollment objects and serializes them.
|
||||
|
||||
Serialized result will be compatible will the results from `get_enrollments`. If
|
||||
the `get_enrollments` function changes to return non-serialized data, this will
|
||||
need to change as well.
|
||||
|
||||
Args:
|
||||
enrollments: list of CourseEnrollment objects to be serialized
|
||||
|
||||
Returns:
|
||||
A list of enrollments
|
||||
"""
|
||||
return _data_api().serialize_enrollments(enrollments)
|
||||
|
||||
|
||||
def _data_api():
|
||||
"""Returns a Data API.
|
||||
This relies on Django settings to find the appropriate data API.
|
||||
|
||||
@@ -354,3 +354,10 @@ def get_user_roles(username):
|
||||
user._roles = RoleCache(user)
|
||||
role_cache = user._roles
|
||||
return role_cache._roles
|
||||
|
||||
|
||||
def serialize_enrollments(enrollments):
|
||||
"""
|
||||
Take CourseEnrollment objects and return them in a serialized list.
|
||||
"""
|
||||
return CourseEnrollmentSerializer(enrollments, many=True).data
|
||||
|
||||
@@ -901,7 +901,7 @@ class ProgramMarketingDataExtender(ProgramDataExtender):
|
||||
self.instructors.append(instructor)
|
||||
|
||||
|
||||
def is_user_enrolled_in_program_type(user, program_type, paid_modes=False):
|
||||
def is_user_enrolled_in_program_type(user, program_type, paid_modes=False, enrollments=None, entitlements=None):
|
||||
"""
|
||||
This method will Look at the learners Enrollments and Entitlements to determine
|
||||
if a learner is enrolled in a Program of the given type.
|
||||
@@ -931,12 +931,12 @@ def is_user_enrolled_in_program_type(user, program_type, paid_modes=False):
|
||||
|
||||
# Check Entitlements first, because there will be less Course Entitlements than
|
||||
# Course Run Enrollments.
|
||||
student_entitlements = get_active_entitlement_list_for_user(user)
|
||||
student_entitlements = entitlements if entitlements is not None else get_active_entitlement_list_for_user(user)
|
||||
for entitlement in student_entitlements:
|
||||
if str(entitlement.course_uuid) in course_uuids:
|
||||
return True
|
||||
|
||||
student_enrollments = get_enrollments(user.username)
|
||||
student_enrollments = enrollments if enrollments is not None else get_enrollments(user.username)
|
||||
for enrollment in student_enrollments:
|
||||
course_run_id = enrollment['course_details']['course_id']
|
||||
if paid_modes:
|
||||
|
||||
@@ -141,11 +141,16 @@ from student.models import CourseEnrollment
|
||||
<section class="dashboard" id="dashboard-main">
|
||||
<main class="main-container" id="main" aria-label="Content" tabindex="-1">
|
||||
<%
|
||||
MB_SLUG = "microbachelors"
|
||||
enrolled_in_mb_program = MB_SLUG in enrolled_program_types
|
||||
from openedx.core.djangoapps.demographics.api.status import show_user_demographics
|
||||
from openedx.core.djangoapps.enrollments.api import serialize_enrollments
|
||||
serialized_course_enrollments = serialize_enrollments(course_enrollments)
|
||||
demographics_enabled = getattr(settings, 'ENABLE_DEMOGRAPHICS_COLLECTION', False)
|
||||
display_demographics_banner = demographics_enabled and show_user_demographics(
|
||||
user, enrollments=serialized_course_enrollments, entitlements=course_entitlements
|
||||
)
|
||||
account_mfe_url = getattr(settings, 'ACCOUNT_MICROFRONTEND_URL', '') or ''
|
||||
%>
|
||||
% if getattr(settings, 'ENABLE_DEMOGRAPHICS_COLLECTION', False) and enrolled_in_mb_program:
|
||||
% if display_demographics_banner:
|
||||
<a href="${account_mfe_url}#demographics">
|
||||
<div
|
||||
class="demographics-banner d-flex justify-content-left align-items-center flex-column flex-lg-row py-1 px-4 mb-2 mb-lg-4">
|
||||
|
||||
Reference in New Issue
Block a user