From 36e07f6be8ed309722347c5d7a26be61fe355dcd Mon Sep 17 00:00:00 2001 From: JJ <34042537+jhan217@users.noreply.github.com> Date: Thu, 9 Jul 2020 09:28:03 -0400 Subject: [PATCH] [REV-1205] Add ecommerce event tracking to course dashboard upgrade button (#24338) Create a Javascript function to log upsell events to & attach the eventing to the course dashboard upsell button. The revenue squad is looking for more insight into which buttons users are clicking to get to the checkout page. --- lms/djangoapps/experiments/utils.py | 23 ++++++++++--- .../js/commerce/track_ecommerce_events.js | 34 +++++++++++++++++++ .../dashboard/_dashboard_course_listing.html | 18 +++++++++- 3 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 lms/static/js/commerce/track_ecommerce_events.js diff --git a/lms/djangoapps/experiments/utils.py b/lms/djangoapps/experiments/utils.py index 4ee77775b5..44a856bdfc 100644 --- a/lms/djangoapps/experiments/utils.py +++ b/lms/djangoapps/experiments/utils.py @@ -48,7 +48,6 @@ experiments_namespace = WaffleFlagNamespace(name=u'experiments') PROGRAM_INFO_FLAG = WaffleFlag( waffle_namespace=experiments_namespace, flag_name=u'add_programs', - flag_undefined_default=False ) # .. toggle_name: experiments.add_dashboard_info @@ -62,11 +61,27 @@ PROGRAM_INFO_FLAG = WaffleFlag( # .. toggle_warnings: None # .. toggle_tickets: REVEM-118 # .. toggle_status: supported -DASHBOARD_INFO_FLAG = WaffleFlag(experiments_namespace, - u'add_dashboard_info', - flag_undefined_default=False) +DASHBOARD_INFO_FLAG = WaffleFlag(experiments_namespace, u'add_dashboard_info') # TODO END: clean up as part of REVEM-199 (End) +# TODO: Clean up as part of REV-1205 (START) +# .. toggle_name: experiments.add_upsell_tracking +# .. toggle_implementation: WaffleFlag +# .. toggle_default: False +# .. toggle_description: Make sure upsell tracking JS works as expected. +# .. toggle_category: experiments +# .. toggle_use_cases: monitored_rollout +# .. toggle_creation_date: 2020-7-7 +# .. toggle_expiration_date: None +# .. toggle_warnings: None +# .. toggle_tickets: REV-1205 +# .. toggle_status: supported +UPSELL_TRACKING_FLAG = WaffleFlag( + waffle_namespace=experiments_namespace, + flag_name=u'add_upsell_tracking' +) +# TODO END: Clean up as part of REV-1205 (End) + def check_and_get_upgrade_link_and_date(user, enrollment=None, course=None): """ diff --git a/lms/static/js/commerce/track_ecommerce_events.js b/lms/static/js/commerce/track_ecommerce_events.js new file mode 100644 index 0000000000..79a973558f --- /dev/null +++ b/lms/static/js/commerce/track_ecommerce_events.js @@ -0,0 +1,34 @@ +/** + * + * A library of helper functions to track ecommerce related events. + * + */ +(function(define) { + 'use strict'; + define([], function() { + var trackUpsellClick = function(elt, linkName, optionalAttrs) { + var eventAttrs = {linkName: linkName}; + var allowedAttrs = ['linkType', 'pageName', 'linkCategory']; + + if (!window.analytics) { + return; + } + + if ( + typeof optionalAttrs !== 'undefined' && + optionalAttrs !== null && + Object.keys(optionalAttrs).length > 0 + ) { + allowedAttrs.forEach(function(allowedAttr) { + eventAttrs[allowedAttr] = optionalAttrs[allowedAttr]; + }); + } + + window.analytics.trackLink(elt, 'edx.bi.ecommerce.upsell_links_clicked', eventAttrs); + }; + + var TrackECommerceEvents = {trackUpsellClick: trackUpsellClick}; + + return TrackECommerceEvents; + }); +}).call(this, define || RequireJS.define); diff --git a/lms/templates/dashboard/_dashboard_course_listing.html b/lms/templates/dashboard/_dashboard_course_listing.html index 5533108156..8963bfbf28 100644 --- a/lms/templates/dashboard/_dashboard_course_listing.html +++ b/lms/templates/dashboard/_dashboard_course_listing.html @@ -22,6 +22,7 @@ from student.helpers import ( DISABLE_UNENROLL_CERT_STATES, ) from util.course import get_link_for_about_page, get_encoded_course_sharing_utm_params +from lms.djangoapps.experiments.utils import UPSELL_TRACKING_FLAG %> <% @@ -411,7 +412,7 @@ from util.course import get_link_for_about_page, get_encoded_course_sharing_utm_