Commit 1fa1d357 by Renzo Lucioni

Merge pull request #6326 from edx/renzo/split-verification-dashboard-analytics

Split verification dashboard analytics
parents ccb5bfbc aeeb45cf
...@@ -31,23 +31,51 @@ ...@@ -31,23 +31,51 @@
*/ */
edx.dashboard.legacy.init = function(urls) { edx.dashboard.legacy.init = function(urls) {
// On initialization, set focus to the first notification available var notifications = $('.dashboard-notifications'),
// for screen readers. upgradeButtonLinks = $('.action-upgrade'),
var notifications = $('.dashboard-notifications'); verifyButtonLinks = $('.verification-cta > .cta');
if (notifications.children().length > 0) {
// On initialization, set focus to the first notification available for screen readers.
if ( notifications.children().length > 0 ) {
notifications.focus(); notifications.focus();
} }
$('.message.is-expandable .wrapper-tip').bind('click', toggleExpandMessage); $('.message.is-expandable .wrapper-tip').bind('click', toggleExpandMessage);
function toggleExpandMessage(e) { // Track clicks of the upgrade button. The `trackLink` method is a helper that makes
(e).preventDefault(); // a `track` call whenever a bound link is clicked. Usually the page would change before
// `track` had time to execute; `trackLink` inserts a small timeout to give the `track`
// call enough time to fire. The clicked link element is passed to `generateProperties`.
window.analytics.trackLink(upgradeButtonLinks, 'edx.bi.dashboard.upgrade_button.clicked', generateProperties);
// Track clicks of the "verify now" button.
window.analytics.trackLink(verifyButtonLinks, 'edx.bi.user.verification.resumed', generateProperties);
// Generate the properties object to be passed along with business intelligence events.
function generateProperties(element) {
var $el = $(element),
properties = {};
if ( $el.hasClass('action-upgrade') ) {
properties.category = 'upgrade';
} else if ( $el.hasClass('cta') ) {
properties.category = 'verification';
}
properties.label = $el.data('course-id');
return properties;
}
function toggleExpandMessage(event) {
var course = $(event.target).closest('.message-upsell').find('.action-upgrade').data('course-id');
event.preventDefault();
$(this).closest('.message.is-expandable').toggleClass('is-expanded'); $(this).closest('.message.is-expandable').toggleClass('is-expanded');
var course = $("#upgrade-to-verified").data("course-id"); window.analytics.track('edx.bi.dashboard.upgrade_copy.expanded', {
analytics.track('edx.bi.dashboard.upsell_copy.clicked', { category: 'upgrade',
category: 'user-engagement',
label: course label: course
}); });
} }
...@@ -61,8 +89,9 @@ ...@@ -61,8 +89,9 @@
}); });
$("#upgrade-to-verified").click(function(event) { $("#upgrade-to-verified").click(function(event) {
var user = $(event.target).data("user"); var user = $(event.target).closest(".action-upgrade").data("user"),
var course = $(event.target).data("course-id"); course = $(event.target).closest(".action-upgrade").data("course-id");
Logger.log('edx.course.enrollment.upgrade.clicked', [user, course], null); Logger.log('edx.course.enrollment.upgrade.clicked', [user, course], null);
}); });
......
...@@ -11,6 +11,11 @@ var edx = edx || {}; ...@@ -11,6 +11,11 @@ var edx = edx || {};
// Currently, this step does not need to install any event handlers, // Currently, this step does not need to install any event handlers,
// since the displayed information is static. // since the displayed information is static.
edx.verify_student.EnrollmentConfirmationStepView = edx.verify_student.StepView.extend({}); edx.verify_student.EnrollmentConfirmationStepView = edx.verify_student.StepView.extend({
postRender: function() {
// Track a virtual pageview, for easy funnel reconstruction.
window.analytics.page( 'verification', this.templateName );
}
});
})( jQuery ); })( jQuery );
...@@ -19,6 +19,9 @@ var edx = edx || {}; ...@@ -19,6 +19,9 @@ var edx = edx || {};
errorModel: this.errorModel errorModel: this.errorModel
}).render(); }).render();
// Track a virtual pageview, for easy funnel reconstruction.
window.analytics.page( 'verification', this.templateName );
this.listenTo( webcam, 'imageCaptured', function() { this.listenTo( webcam, 'imageCaptured', function() {
// Track the user's successful image capture // Track the user's successful image capture
window.analytics.track( 'edx.bi.user.face_image.captured', { window.analytics.track( 'edx.bi.user.face_image.captured', {
......
...@@ -19,6 +19,9 @@ var edx = edx || {}; ...@@ -19,6 +19,9 @@ var edx = edx || {};
errorModel: this.errorModel errorModel: this.errorModel
}).render(); }).render();
// Track a virtual pageview, for easy funnel reconstruction.
window.analytics.page( 'verification', this.templateName );
this.listenTo( webcam, 'imageCaptured', function() { this.listenTo( webcam, 'imageCaptured', function() {
// Track the user's successful image capture // Track the user's successful image capture
window.analytics.track( 'edx.bi.user.identification_image.captured', { window.analytics.track( 'edx.bi.user.identification_image.captured', {
......
...@@ -21,6 +21,9 @@ var edx = edx || {}; ...@@ -21,6 +21,9 @@ var edx = edx || {};
el: $( '.requirements-container', this.el ), el: $( '.requirements-container', this.el ),
requirements: this.stepData.requirements requirements: this.stepData.requirements
}).render(); }).render();
// Track a virtual pageview, for easy funnel reconstruction.
window.analytics.page( 'verification', this.templateName );
} }
}); });
......
...@@ -17,6 +17,9 @@ var edx = edx || {}; ...@@ -17,6 +17,9 @@ var edx = edx || {};
requirements: this.stepData.requirements requirements: this.stepData.requirements
}).render(); }).render();
// Track a virtual pageview, for easy funnel reconstruction.
window.analytics.page( 'payment', this.templateName );
// Update the contribution amount with the amount the user // Update the contribution amount with the amount the user
// selected in a previous screen. // selected in a previous screen.
if ( this.stepData.contributionAmount ) { if ( this.stepData.contributionAmount ) {
...@@ -84,7 +87,7 @@ var edx = edx || {}; ...@@ -84,7 +87,7 @@ var edx = edx || {};
// Marketing needs a way to tell the difference between users // Marketing needs a way to tell the difference between users
// leaving for the payment processor and users dropping off on // leaving for the payment processor and users dropping off on
// this page. A virtual pageview can be used to do this. // this page. A virtual pageview can be used to do this.
window.analytics.page( 'verification', 'payment_processor_step' ); window.analytics.page( 'payment', 'payment_processor_step' );
form.submit(); form.submit();
}, },
......
...@@ -71,18 +71,20 @@ var edx = edx || {}; ...@@ -71,18 +71,20 @@ var edx = edx || {};
* those used to track business intelligence events. * those used to track business intelligence events.
*/ */
postRender: function() { postRender: function() {
var $verifyNowButton = $('#verify_now_button'),
$verifyLaterButton = $('#verify_later_button');
// Track a virtual pageview, for easy funnel reconstruction.
window.analytics.page( 'payment', this.templateName );
// Track the user's decision to verify immediately // Track the user's decision to verify immediately
$( '#verify_now_button' ).on( 'click', function() { window.analytics.trackLink( $verifyNowButton, 'edx.bi.user.verification.immediate', {
window.analytics.track( 'edx.bi.user.verification.immediate', { category: 'verification'
category: 'verification'
});
}); });
// Track the user's decision to defer their verification // Track the user's decision to defer their verification
$( '#verify_later_button' ).on( 'click', function() { window.analytics.trackLink( $verifyLaterButton, 'edx.bi.user.verification.deferred', {
window.analytics.track( 'edx.bi.user.verification.deferred', { category: 'verification'
category: 'verification'
});
}); });
}, },
......
...@@ -30,6 +30,9 @@ var edx = edx || {}; ...@@ -30,6 +30,9 @@ var edx = edx || {};
// When moving to the next step, submit photos for verification // When moving to the next step, submit photos for verification
$( '#next_step_button' ).on( 'click', _.bind( this.submitPhotos, this ) ); $( '#next_step_button' ).on( 'click', _.bind( this.submitPhotos, this ) );
// Track a virtual pageview, for easy funnel reconstruction.
window.analytics.page( 'verification', this.templateName );
}, },
toggleSubmitEnabled: function() { toggleSubmitEnabled: function() {
...@@ -38,7 +41,7 @@ var edx = edx || {}; ...@@ -38,7 +41,7 @@ var edx = edx || {};
retakePhotos: function() { retakePhotos: function() {
// Track the user's intent to retake their photos // Track the user's intent to retake their photos
window.analytics.track( 'edx.bi.user.verification_images.retaken', { window.analytics.track( 'edx.bi.user.images.retaken', {
category: 'verification' category: 'verification'
}); });
......
...@@ -47,9 +47,6 @@ ...@@ -47,9 +47,6 @@
this.postRender(); this.postRender();
} }
).fail( _.bind( this.handleError, this ) ); ).fail( _.bind( this.handleError, this ) );
// Track a virtual pageview, for easy funnel reconstruction.
window.analytics.page( 'verification', this.templateName );
}, },
handleResponse: function( data ) { handleResponse: function( data ) {
......
...@@ -141,7 +141,7 @@ ...@@ -141,7 +141,7 @@
% endif % endif
</div> </div>
<div class="verification-cta"> <div class="verification-cta">
<a href="${reverse('verify_student_verify_later', kwargs={'course_id': unicode(course.id)})}" class="cta">${_('Verify Now')}</a> <a href="${reverse('verify_student_verify_later', kwargs={'course_id': unicode(course.id)})}" class="cta" data-course-id="${course.id | h}">${_('Verify Now')}</a>
</div> </div>
% elif verification_status['status'] == VERIFY_STATUS_SUBMITTED: % elif verification_status['status'] == VERIFY_STATUS_SUBMITTED:
<h4 class="message-title">${_('You have already verified your ID!')}</h4> <h4 class="message-title">${_('You have already verified your ID!')}</h4>
...@@ -173,13 +173,13 @@ ...@@ -173,13 +173,13 @@
<ul class="actions message-actions"> <ul class="actions message-actions">
<li class="action-item"> <li class="action-item">
% if settings.FEATURES.get('SEPARATE_VERIFICATION_FROM_PAYMENT'): % if settings.FEATURES.get('SEPARATE_VERIFICATION_FROM_PAYMENT'):
<a class="action action-upgrade" href="${reverse('verify_student_upgrade_and_verify', kwargs={'course_id': unicode(course.id)})}"> <a class="action action-upgrade" href="${reverse('verify_student_upgrade_and_verify', kwargs={'course_id': unicode(course.id)})}" data-course-id="${course.id | h}" data-user="${user.username | h}">
% else: % else:
<a class="action action-upgrade" href="${reverse('course_modes_choose', kwargs={'course_id': unicode(course.id)})}?upgrade=True"> <a class="action action-upgrade" href="${reverse('course_modes_choose', kwargs={'course_id': unicode(course.id)})}?upgrade=True" data-course-id="${course.id | h}" data-user="${user.username | h}">
% endif % endif
<img class="deco-graphic" src="${static.url('images/vcert-ribbon-s.png')}" alt="ID Verified Ribbon/Badge"> <img class="deco-graphic" src="${static.url('images/vcert-ribbon-s.png')}" alt="ID Verified Ribbon/Badge">
<span class="wrapper-copy"> <span class="wrapper-copy">
<span class="copy" id="upgrade-to-verified" data-course-id="${course.id | h}" data-user="${user.username | h}">${_("Upgrade to Verified Track")}</span> <span class="copy" id="upgrade-to-verified">${_("Upgrade to Verified Track")}</span>
</span> </span>
</a> </a>
</li> </li>
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
<script type="text/javascript"> <script type="text/javascript">
var analytics = { var analytics = {
track: function() { return; }, track: function() { return; },
trackLink: function() { return; },
pageview: function() { return; }, pageview: function() { return; },
page: function() { return; } page: function() { return; }
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment