Files
edx-platform/common/djangoapps/student/email_helpers.py

86 lines
3.3 KiB
Python

"""
Helpers for Student app emails.
"""
from string import capwords
from django.conf import settings
from lms.djangoapps.verify_student.services import IDVerificationService
from openedx.core.djangoapps.ace_common.template_context import get_base_template_context
from openedx.core.djangoapps.enrollments.api import is_enrollment_valid_for_proctoring
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
from openedx.core.djangoapps.theming import helpers as theming_helpers
from xmodule.modulestore.django import modulestore # lint-amnesty, pylint: disable=wrong-import-order
def generate_activation_email_context(user, registration):
"""
Constructs a dictionary for use in activation email contexts
Arguments:
user (User): Currently logged-in user
registration (Registration): Registration object for the currently logged-in user
"""
site = theming_helpers.get_current_site()
context = get_base_template_context(site)
context.update({
'name': user.profile.name,
'key': registration.activation_key,
'lms_url': configuration_helpers.get_value('LMS_ROOT_URL', settings.LMS_ROOT_URL),
'platform_name': configuration_helpers.get_value('PLATFORM_NAME', settings.PLATFORM_NAME),
'contact_mailing_address': configuration_helpers.get_value(
'contact_mailing_address',
settings.CONTACT_MAILING_ADDRESS
),
'support_url': configuration_helpers.get_value(
'ACTIVATION_EMAIL_SUPPORT_LINK', settings.ACTIVATION_EMAIL_SUPPORT_LINK
) or settings.SUPPORT_SITE_LINK,
'support_email': configuration_helpers.get_value('CONTACT_EMAIL', settings.CONTACT_EMAIL),
'site_configuration_values': configuration_helpers.get_current_site_configuration_values(),
})
return context
def generate_proctoring_requirements_email_context(user, course_id):
"""
Constructs a dictionary for use in proctoring requirements email context
Arguments:
user: Currently logged-in user
course_id: ID of the proctoring-enabled course the user is enrolled in
"""
course_block = modulestore().get_course(course_id)
return {
'user': user,
'course_name': course_block.display_name,
'proctoring_provider': capwords(course_block.proctoring_provider.replace('_', ' ')),
'proctoring_requirements_url': settings.PROCTORING_SETTINGS.get('LINK_URLS', {}).get('faq', ''),
'idv_required': not settings.FEATURES.get('ENABLE_INTEGRITY_SIGNATURE'),
'id_verification_url': IDVerificationService.get_verify_location(),
}
def should_send_proctoring_requirements_email(username, course_id):
"""
Returns a boolean whether a proctoring requirements email should be sent.
Arguments:
* username (str): The user associated with the enrollment.
* course_id (str): The course id associated with the enrollment.
"""
if not is_enrollment_valid_for_proctoring(username, course_id):
return False
# Only send if a proctored exam is found in the course
timed_exams = modulestore().get_items(
course_id,
qualifiers={'category': 'sequential'},
settings={'is_time_limited': True}
)
has_proctored_exam = any(exam.is_proctored_exam for exam in timed_exams)
return has_proctored_exam