diff --git a/common/djangoapps/util/course.py b/common/djangoapps/util/course.py
index ce85903607..5805afee37 100644
--- a/common/djangoapps/util/course.py
+++ b/common/djangoapps/util/course.py
@@ -2,10 +2,35 @@
Utility methods related to course
"""
import logging
+import urllib
+
from django.conf import settings
log = logging.getLogger(__name__)
+COURSE_SHARING_UTM_PARAMETERS = {
+ 'facebook': {
+ 'utm_medium': 'social-post',
+ 'utm_campaign': 'social-sharing',
+ 'utm_source': 'facebook',
+ },
+ 'twitter': {
+ 'utm_medium': 'social-post',
+ 'utm_campaign': 'social-sharing',
+ 'utm_source': 'twitter',
+ },
+}
+
+
+def get_encoded_course_sharing_utm_params():
+ """
+ Returns encoded Course Sharing UTM Parameters.
+ """
+ return {
+ utm_source: urllib.urlencode(utm_params)
+ for utm_source, utm_params in COURSE_SHARING_UTM_PARAMETERS.iteritems()
+ }
+
def get_link_for_about_page(course):
"""
diff --git a/common/test/acceptance/tests/lms/test_lms_dashboard.py b/common/test/acceptance/tests/lms/test_lms_dashboard.py
index 4788d9e342..b37e90980e 100644
--- a/common/test/acceptance/tests/lms/test_lms_dashboard.py
+++ b/common/test/acceptance/tests/lms/test_lms_dashboard.py
@@ -153,7 +153,8 @@ class LmsDashboardPageTest(BaseLmsDashboardTest):
Validate the behavior of the social sharing feature
"""
twitter_widget = self.dashboard_page.get_course_social_sharing_widget('twitter')
- twitter_url = "https://twitter.com/intent/tweet?text=Testing+feature%3A%20http%3A%2F%2Fcustom%2Fcourse%2Furl"
+ twitter_url = ("https://twitter.com/intent/tweet?text=Testing+feature%3A%20http%3A%2F%2Fcustom%2Fcourse%2Furl"
+ "%3Futm_campaign%3Dsocial-sharing%26utm_medium%3Dsocial-post%26utm_source%3Dtwitter")
self.assertEqual(twitter_widget.attrs('title')[0], 'Share on Twitter')
self.assertEqual(twitter_widget.attrs('data-tooltip')[0], 'Share on Twitter')
self.assertEqual(twitter_widget.attrs('aria-haspopup')[0], 'true')
@@ -163,8 +164,9 @@ class LmsDashboardPageTest(BaseLmsDashboardTest):
self.assertIn(twitter_url, twitter_widget.attrs('onclick')[0])
facebook_widget = self.dashboard_page.get_course_social_sharing_widget('facebook')
- facebook_url = ('https://www.facebook.com/sharer/sharer.php?'
- 'u=http%3A%2F%2Fcustom%2Fcourse%2Furl"e=I%27m+taking')
+ facebook_url = ("https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fcustom%2Fcourse%2Furl%3F"
+ "utm_campaign%3Dsocial-sharing%26utm_medium%3Dsocial-post%26utm_source%3Dfacebook&"
+ "quote=I%27m+taking+Test")
self.assertEqual(facebook_widget.attrs('title')[0], 'Share on Facebook')
self.assertEqual(facebook_widget.attrs('data-tooltip')[0], 'Share on Facebook')
self.assertEqual(facebook_widget.attrs('aria-haspopup')[0], 'true')
diff --git a/lms/djangoapps/mobile_api/users/serializers.py b/lms/djangoapps/mobile_api/users/serializers.py
index e22612bc5b..6debf74a62 100644
--- a/lms/djangoapps/mobile_api/users/serializers.py
+++ b/lms/djangoapps/mobile_api/users/serializers.py
@@ -8,7 +8,7 @@ from rest_framework.reverse import reverse
from certificates.api import certificate_downloadable_status
from courseware.access import has_access
from student.models import CourseEnrollment, User
-from util.course import get_link_for_about_page
+from util.course import get_link_for_about_page, get_encoded_course_sharing_utm_params
class CourseOverviewField(serializers.RelatedField):
@@ -53,6 +53,7 @@ class CourseOverviewField(serializers.RelatedField):
},
'course_image': course_overview.course_image_url,
'course_about': get_link_for_about_page(course_overview),
+ 'course_sharing_utm_parameters': get_encoded_course_sharing_utm_params(),
'course_updates': reverse(
'course-updates-list',
kwargs={'course_id': course_id},
diff --git a/lms/djangoapps/mobile_api/users/tests.py b/lms/djangoapps/mobile_api/users/tests.py
index ad58a7839f..2cb0e64263 100644
--- a/lms/djangoapps/mobile_api/users/tests.py
+++ b/lms/djangoapps/mobile_api/users/tests.py
@@ -486,6 +486,13 @@ class TestCourseEnrollmentSerializer(MobileAPITestCase, MilestonesTestCaseMixin)
self.assertEqual(serialized['course']['number'], self.course.id.course)
self.assertEqual(serialized['course']['org'], self.course.id.org)
+ # Assert utm parameters
+ expected_utm_parameters = {
+ 'twitter': 'utm_campaign=social-sharing&utm_medium=social-post&utm_source=twitter',
+ 'facebook': 'utm_campaign=social-sharing&utm_medium=social-post&utm_source=facebook'
+ }
+ self.assertEqual(serialized['course']['course_sharing_utm_parameters'], expected_utm_parameters)
+
def test_with_display_overrides(self):
self.course.display_coursenumber = "overridden_number"
self.course.display_organization = "overridden_org"
diff --git a/lms/djangoapps/mobile_api/users/views.py b/lms/djangoapps/mobile_api/users/views.py
index a447645266..9ec9a071b6 100644
--- a/lms/djangoapps/mobile_api/users/views.py
+++ b/lms/djangoapps/mobile_api/users/views.py
@@ -229,6 +229,7 @@ class UserCourseEnrollmentsList(generics.ListAPIView):
including any access errors.
* course_about: The URL to the course about page.
+ * course_sharing_utm_parameters: Encoded UTM parameters to be included in course sharing url
* course_handouts: The URI to get data for course handouts.
* course_image: The path to the course image.
* course_updates: The URI to get data for course updates.
diff --git a/lms/templates/dashboard/_dashboard_course_listing.html b/lms/templates/dashboard/_dashboard_course_listing.html
index 7458b2f3f5..b127019b10 100644
--- a/lms/templates/dashboard/_dashboard_course_listing.html
+++ b/lms/templates/dashboard/_dashboard_course_listing.html
@@ -19,7 +19,7 @@ from student.helpers import (
VERIFY_STATUS_NEED_TO_REVERIFY,
DISABLE_UNENROLL_CERT_STATES,
)
-from util.course import get_link_for_about_page
+from util.course import get_link_for_about_page, get_encoded_course_sharing_utm_params
%>
<%
@@ -151,13 +151,15 @@ from util.course import get_link_for_about_page
% if share_settings:
<%
share_url = get_link_for_about_page(course_overview)
+ encoded_utm_parameters = get_encoded_course_sharing_utm_params()
share_window_name = 'shareWindow'
share_window_config = 'toolbar=no, location=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'
%>
% if share_settings.get('DASHBOARD_FACEBOOK', False):
<%
+ facebook_share_url = "{url}?{utm_params}".format(url=share_url, utm_params=encoded_utm_parameters['facebook'])
share_text = _("I'm taking {course_name} online with edX.org. Check it out!").format(course_name=course_overview.display_name_with_default)
- query_params = urllib.urlencode((('u', share_url), ('quote', share_text.encode('utf-8')),))
+ query_params = urllib.urlencode((('u', facebook_share_url), ('quote', share_text.encode('utf-8')),))
facebook_url = 'https://www.facebook.com/sharer/sharer.php?{query}'.format(query=query_params)
%>