Pwattenberger/sailthru enroll (#12816)
* Partial changes for purchase tracking * Continued changes for purchase tracking * Clean up code quality issues * Clean up code quality issues * Responses to code review * Fix code quality flaged issues * Fix code quality flaged issues * Fix code quality flaged issues * Fix problem processing sailthru_content cookie
This commit is contained in:
@@ -61,10 +61,32 @@ from util.milestones_helpers import is_entrance_exams_enabled
|
||||
|
||||
|
||||
UNENROLL_DONE = Signal(providing_args=["course_enrollment", "skip_refund"])
|
||||
ENROLL_STATUS_CHANGE = Signal(providing_args=["event", "user", "course_id", "mode", "cost", "currency"])
|
||||
log = logging.getLogger(__name__)
|
||||
AUDIT_LOG = logging.getLogger("audit")
|
||||
SessionStore = import_module(settings.SESSION_ENGINE).SessionStore # pylint: disable=invalid-name
|
||||
|
||||
# enroll status changed events - signaled to email_marketing. See email_marketing.tasks for more info
|
||||
|
||||
|
||||
# ENROLL signal used for free enrollment only
|
||||
class EnrollStatusChange(object):
|
||||
"""
|
||||
Possible event types for ENROLL_STATUS_CHANGE signal
|
||||
"""
|
||||
# enroll for a course
|
||||
enroll = 'enroll'
|
||||
# unenroll for a course
|
||||
unenroll = 'unenroll'
|
||||
# add an upgrade to cart
|
||||
upgrade_start = 'upgrade_start'
|
||||
# complete an upgrade purchase
|
||||
upgrade_complete = 'upgrade_complete'
|
||||
# add a paid course to the cart
|
||||
paid_start = 'paid_start'
|
||||
# complete a paid course purchase
|
||||
paid_complete = 'paid_complete'
|
||||
|
||||
UNENROLLED_TO_ALLOWEDTOENROLL = 'from unenrolled to allowed to enroll'
|
||||
ALLOWEDTOENROLL_TO_ENROLLED = 'from allowed to enroll to enrolled'
|
||||
ENROLLED_TO_ENROLLED = 'from enrolled to enrolled'
|
||||
@@ -1113,6 +1135,7 @@ class CourseEnrollment(models.Model):
|
||||
UNENROLL_DONE.send(sender=None, course_enrollment=self, skip_refund=skip_refund)
|
||||
|
||||
self.emit_event(EVENT_NAME_ENROLLMENT_DEACTIVATED)
|
||||
self.send_signal(EnrollStatusChange.unenroll)
|
||||
|
||||
dog_stats_api.increment(
|
||||
"common.student.unenrollment",
|
||||
@@ -1125,6 +1148,24 @@ class CourseEnrollment(models.Model):
|
||||
# mode has changed from its previous setting
|
||||
self.emit_event(EVENT_NAME_ENROLLMENT_MODE_CHANGED)
|
||||
|
||||
def send_signal(self, event, cost=None, currency=None):
|
||||
"""
|
||||
Sends a signal announcing changes in course enrollment status.
|
||||
"""
|
||||
ENROLL_STATUS_CHANGE.send(sender=None, event=event, user=self.user,
|
||||
mode=self.mode, course_id=self.course_id,
|
||||
cost=cost, currency=currency)
|
||||
|
||||
@classmethod
|
||||
def send_signal_full(cls, event, user=user, mode=mode, course_id=course_id, cost=None, currency=None):
|
||||
"""
|
||||
Sends a signal announcing changes in course enrollment status.
|
||||
This version should be used if you don't already have a CourseEnrollment object
|
||||
"""
|
||||
ENROLL_STATUS_CHANGE.send(sender=None, event=event, user=user,
|
||||
mode=mode, course_id=course_id,
|
||||
cost=cost, currency=currency)
|
||||
|
||||
def emit_event(self, event_name):
|
||||
"""
|
||||
Emits an event to explicitly track course enrollment and unenrollment.
|
||||
|
||||
@@ -112,7 +112,7 @@ from student.helpers import (
|
||||
DISABLE_UNENROLL_CERT_STATES,
|
||||
)
|
||||
from student.cookies import set_logged_in_cookies, delete_logged_in_cookies
|
||||
from student.models import anonymous_id_for_user, UserAttribute
|
||||
from student.models import anonymous_id_for_user, UserAttribute, EnrollStatusChange
|
||||
from shoppingcart.models import DonationConfiguration, CourseRegistrationCode
|
||||
|
||||
from embargo import api as embargo_api
|
||||
@@ -1065,7 +1065,8 @@ def change_enrollment(request, check_access=True):
|
||||
try:
|
||||
enroll_mode = CourseMode.auto_enroll_mode(course_id, available_modes)
|
||||
if enroll_mode:
|
||||
CourseEnrollment.enroll(user, course_id, check_access=check_access, mode=enroll_mode)
|
||||
enrollment = CourseEnrollment.enroll(user, course_id, check_access=check_access, mode=enroll_mode)
|
||||
enrollment.send_signal(EnrollStatusChange.enroll)
|
||||
except Exception: # pylint: disable=broad-except
|
||||
return HttpResponseBadRequest(_("Could not enroll"))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user