Merge pull request #13684 from edx/student_cleanup/decoupled_dependencies
Decouple student's dependency on badges with django signals
This commit is contained in:
@@ -47,7 +47,6 @@ from simple_history.models import HistoricalRecords
|
||||
from track import contexts
|
||||
from openedx.core.djangoapps.xmodule_django.models import CourseKeyField, NoneToEmptyManager
|
||||
|
||||
from lms.djangoapps.badges.utils import badges_enabled
|
||||
from certificates.models import GeneratedCertificate
|
||||
from course_modes.models import CourseMode
|
||||
from enrollment.api import _default_course_mode
|
||||
@@ -1297,9 +1296,7 @@ class CourseEnrollment(models.Model):
|
||||
# User is allowed to enroll if they've reached this point.
|
||||
enrollment = cls.get_or_create_enrollment(user, course_key)
|
||||
enrollment.update_enrollment(is_active=True, mode=mode)
|
||||
if badges_enabled():
|
||||
from lms.djangoapps.badges.events.course_meta import award_enrollment_badge
|
||||
award_enrollment_badge(user)
|
||||
enrollment.send_signal(EnrollStatusChange.enroll)
|
||||
|
||||
return enrollment
|
||||
|
||||
|
||||
@@ -1079,8 +1079,7 @@ def change_enrollment(request, check_access=True):
|
||||
try:
|
||||
enroll_mode = CourseMode.auto_enroll_mode(course_id, available_modes)
|
||||
if enroll_mode:
|
||||
enrollment = CourseEnrollment.enroll(user, course_id, check_access=check_access, mode=enroll_mode)
|
||||
enrollment.send_signal(EnrollStatusChange.enroll)
|
||||
CourseEnrollment.enroll(user, course_id, check_access=check_access, mode=enroll_mode)
|
||||
except Exception: # pylint: disable=broad-except
|
||||
return HttpResponseBadRequest(_("Could not enroll"))
|
||||
|
||||
|
||||
20
lms/djangoapps/badges/apps.py
Normal file
20
lms/djangoapps/badges/apps.py
Normal file
@@ -0,0 +1,20 @@
|
||||
"""
|
||||
Badges Application Configuration
|
||||
|
||||
Signal handlers are connected here.
|
||||
"""
|
||||
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class BadgesConfig(AppConfig):
|
||||
"""
|
||||
Application Configuration for Badges.
|
||||
"""
|
||||
name = u'badges'
|
||||
|
||||
def ready(self):
|
||||
"""
|
||||
Connect signal handlers.
|
||||
"""
|
||||
from . import handlers # pylint: disable=unused-variable
|
||||
17
lms/djangoapps/badges/handlers.py
Normal file
17
lms/djangoapps/badges/handlers.py
Normal file
@@ -0,0 +1,17 @@
|
||||
"""
|
||||
Badges related signal handlers.
|
||||
"""
|
||||
from django.dispatch import receiver
|
||||
|
||||
from lms.djangoapps.badges.events.course_meta import award_enrollment_badge
|
||||
from lms.djangoapps.badges.utils import badges_enabled
|
||||
from student.models import ENROLL_STATUS_CHANGE, EnrollStatusChange
|
||||
|
||||
|
||||
@receiver(ENROLL_STATUS_CHANGE)
|
||||
def award_badge_on_enrollment(sender, event=None, user=None, **kwargs): # pylint: disable=unused-argument
|
||||
"""
|
||||
Awards enrollment badge to the given user on new enrollments.
|
||||
"""
|
||||
if badges_enabled and event == EnrollStatusChange.enroll:
|
||||
award_enrollment_badge(user)
|
||||
@@ -2093,7 +2093,7 @@ INSTALLED_APPS = (
|
||||
'learner_dashboard',
|
||||
|
||||
# Needed whether or not enabled, due to migrations
|
||||
'badges',
|
||||
'badges.apps.BadgesConfig',
|
||||
|
||||
# Enables default site and redirects
|
||||
'django_sites_extensions',
|
||||
|
||||
Reference in New Issue
Block a user