From e2ee48c3c9af8a324e18c8347cd9488e473bcb43 Mon Sep 17 00:00:00 2001 From: Matthew Piatetsky <mpiatetsky@edx.org> Date: Tue, 22 Aug 2017 13:40:25 -0400 Subject: [PATCH] Revert "Un-revert unenrollment survey and only show it for edx.org users" --- .../courseware/features/registration.feature | 10 +++ lms/static/js/dashboard/legacy.js | 14 ++++ .../learner_dashboard/unenrollment_factory.js | 13 ---- .../learner_dashboard/views/unenroll_view.js | 78 ------------------- .../learner_dashboard/unenroll_view_spec.js | 46 ----------- lms/static/lms/js/build.js | 1 - lms/static/lms/js/spec/main.js | 1 - lms/static/sass/multicourse/_dashboard.scss | 52 ------------- lms/templates/dashboard.html | 13 +--- .../dashboard/_dashboard_course_listing.html | 1 - lms/templates/dashboard/_reason_survey.html | 37 --------- themes/edx.org/lms/templates/dashboard.html | 13 +--- 12 files changed, 26 insertions(+), 253 deletions(-) delete mode 100644 lms/static/js/learner_dashboard/unenrollment_factory.js delete mode 100644 lms/static/js/learner_dashboard/views/unenroll_view.js delete mode 100644 lms/static/js/spec/learner_dashboard/unenroll_view_spec.js delete mode 100644 lms/templates/dashboard/_reason_survey.html diff --git a/lms/djangoapps/courseware/features/registration.feature b/lms/djangoapps/courseware/features/registration.feature index 60b094de48d..fe270a3f857 100644 --- a/lms/djangoapps/courseware/features/registration.feature +++ b/lms/djangoapps/courseware/features/registration.feature @@ -11,3 +11,13 @@ Feature: LMS.Register for a course When I register for the course "6.002x" Then I should see the course numbered "6.002x" in my dashboard And a "edx.course.enrollment.activated" server event is emitted + + Scenario: I can unenroll from a course + Given I am registered for the course "6.002x" + And I visit the dashboard + Then I should see the course numbered "6.002x" in my dashboard + When I unenroll from the course numbered "6.002x" + Then I should be on the dashboard page + And I should see an empty dashboard message + And I should NOT see the course numbered "6.002x" in my dashboard + And a "edx.course.enrollment.deactivated" server event is emitted diff --git a/lms/static/js/dashboard/legacy.js b/lms/static/js/dashboard/legacy.js index a2c3a4a4db1..80402ec5198 100644 --- a/lms/static/js/dashboard/legacy.js +++ b/lms/static/js/dashboard/legacy.js @@ -191,6 +191,20 @@ $('#unenroll-modal').css('position', 'fixed'); }); + $('#unenroll_form').on('ajax:complete', function(event, xhr) { + if (xhr.status === 200) { + location.href = urls.dashboard; + } else if (xhr.status === 403) { + location.href = urls.signInUser + '?course_id=' + + encodeURIComponent($('#unenroll_course_id').val()) + '&enrollment_action=unenroll'; + } else { + $('#unenroll_error').text( + xhr.responseText ? xhr.responseText : gettext('An error occurred. Please try again later.') + ).stop() + .css('display', 'block'); + } + }); + $('#email_settings_form').submit(function() { $.ajax({ type: 'POST', diff --git a/lms/static/js/learner_dashboard/unenrollment_factory.js b/lms/static/js/learner_dashboard/unenrollment_factory.js deleted file mode 100644 index 4afca20bbb4..00000000000 --- a/lms/static/js/learner_dashboard/unenrollment_factory.js +++ /dev/null @@ -1,13 +0,0 @@ -(function(define) { - 'use strict'; - - define([ - 'js/learner_dashboard/views/unenroll_view' - ], - function(UnenrollView) { - return function(options) { - var Unenroll = new UnenrollView(options); - return Unenroll; - }; - }); -}).call(this, define || RequireJS.define); diff --git a/lms/static/js/learner_dashboard/views/unenroll_view.js b/lms/static/js/learner_dashboard/views/unenroll_view.js deleted file mode 100644 index ab52dfe83eb..00000000000 --- a/lms/static/js/learner_dashboard/views/unenroll_view.js +++ /dev/null @@ -1,78 +0,0 @@ -(function(define) { - 'use strict'; - define(['backbone', - 'jquery', - 'underscore', - 'gettext', - 'edx-ui-toolkit/js/utils/html-utils' - ], - function( - Backbone, - $, - _, - gettext, - HtmlUtils - ) { - return Backbone.View.extend({ - el: '.unenroll-modal', - - switchToSlideOne: function() { - var survey, i, - reasonsSurvey = HtmlUtils.HTML($('.reasons_survey')); - // Randomize survey option order - survey = document.querySelector('.options'); - for (i = survey.children.length - 1; i >= 0; i--) { - survey.appendChild(survey.children[Math.random() * i | 0]); - } - $('.inner-wrapper header').hide(); - $('#unenroll_form').after(HtmlUtils.ensureHtml(reasonsSurvey).toString()).hide(); - $('.reasons_survey .slide1').removeClass('hidden'); - }, - - switchToSlideTwo: function() { - var reason = $(".reasons_survey input[name='reason']:checked").attr('val'); - if (reason === 'Other') { - reason = $('.other_text').val(); - } - if (reason) { - window.analytics.track('unenrollment_reason.selected', { - category: 'user-engagement', - label: reason, - displayName: 'v1' - }); - } - HtmlUtils.setHtml($('.reasons_survey'), HtmlUtils.HTML($('.slide2').html())); - $('.reasons_survey .return_to_dashboard').attr('href', this.urls.dashboard); - $('.reasons_survey .browse_courses').attr('href', this.urls.browseCourses); - }, - - unenrollComplete: function(event, xhr) { - if (xhr.status === 200) { - if (!this.isEdx) { - location.href = this.urls.dashboard; - } else { - this.switchToSlideOne(); - $('.submit_reasons').click(this.switchToSlideTwo.bind(this)); - } - } else if (xhr.status === 403) { - location.href = this.urls.signInUser + '?course_id=' + - encodeURIComponent($('#unenroll_course_id').val()) + '&enrollment_action=unenroll'; - } else { - $('#unenroll_error').text( - gettext('Unable to determine whether we should give you a refund because' + - ' of System Error. Please try again later.') - ).stop() - .css('display', 'block'); - } - }, - - initialize: function(options) { - this.urls = options.urls; - this.isEdx = options.isEdx; - - $('#unenroll_form').on('ajax:complete', this.unenrollComplete.bind(this)); - } - }); - } - ); -}).call(this, define || RequireJS.define); diff --git a/lms/static/js/spec/learner_dashboard/unenroll_view_spec.js b/lms/static/js/spec/learner_dashboard/unenroll_view_spec.js deleted file mode 100644 index 1aa0c8efc99..00000000000 --- a/lms/static/js/spec/learner_dashboard/unenroll_view_spec.js +++ /dev/null @@ -1,46 +0,0 @@ -define([ - 'backbone', - 'js/learner_dashboard/views/unenroll_view' -], function(Backbone, UnenrollView) { - 'use strict'; - - describe('Unenroll View', function() { - var view = null, - options = { - urls: { - dashboard: '/dashboard', - browseCourses: '/courses' - }, - isEdx: true - }, - initView; - - initView = function() { - return new UnenrollView(options); - }; - - beforeEach(function() { - setFixtures('<div class="wrapper-action-more" data-course-key="course-v1:edX+DemoX+Demo_Course"> <button type="button" class="action action-more" id="actions-dropdown-link-0" aria-haspopup="true" aria-expanded="true" aria-controls="actions-dropdown-0" data-course-number="DemoX" data-course-name="edX Demonstration Course" data-dashboard-index="0"> <span class="sr">Course options for</span> <span class="sr"> edX Demonstration Course </span> <span class="fa fa-cog" aria-hidden="true"></span> </button> <div class="actions-dropdown is-visible" id="actions-dropdown-0" tabindex="-1"> <ul class="actions-dropdown-list" id="actions-dropdown-list-0" aria-label="Available Actions" role="menu"> <div class="reasons_survey"> <div class="slide1 hidden"> <h3>We\'re sorry to see you go! Please share your main reason for unenrolling.</h3><br> <ul class="options"> <li><label class="option"><input type="radio" name="reason" val="I don\'t have enough support">I don\'t have enough support</label></li><li><label class="option"><input type="radio" name="reason" val="I don’t have the academic or language prerequisites">I don\'t have the academic or language prerequisites</label></li><li><label class="option"><input type="radio" name="reason" val="Something was broken">Something was broken</label></li><li><label class="option"><input type="radio" name="reason" val="I just wanted to browse the material">I just wanted to browse the material</label></li><li><label class="option"><input type="radio" name="reason" val="This won’t help me reach my goals">This won\'t help me reach my goals</label></li><li><label class="option"><input type="radio" name="reason" val="I am not happy with the quality of the content">I am not happy with the quality of the content</label></li><li><label class="option"><input type="radio" name="reason" val="The course material was too hard">The course material was too hard</label></li><li><label class="option"><input type="radio" name="reason" val="I don\'t have the time">I don\'t have the time</label></li><li><label class="option"><input type="radio" name="reason" val="The course material was too easy">The course material was too easy</label></li><li><label class="option"><input class="other_radio" type="radio" name="reason" val="Other">Other <input type="text" class="other_text"></label></li></ul> <button class="submit_reasons">Submit</button> </div> </div> <div class="slide2 hidden"> Thank you for sharing your reasons for unenrolling.<br> You are unenrolled from edX Demonstration Course. <a class="button survey_button return_to_dashboard"> Return To Dashboard </a> <a class="button survey_button browse_courses"> Browse Courses </a> </div> <li class="actions-item" id="actions-item-unenroll-0"> <a href="#unenroll-modal" class="action action-unenroll" rel="leanModal" data-course-id="course-v1:edX+DemoX+Demo_Course" data-course-number="DemoX" data-course-name="edX Demonstration Course" data-dashboard-index="0" data-track-info="Are you sure you want to unenroll from %(course_name)s (%(course_number)s)?" id="unenroll-0"> Unenroll </a> </li> <li class="actions-item" id="actions-item-email-settings-0"> </li> </ul> </div> </div>'); // eslint-disable-line max-len - }); - - afterEach(function() { - view.remove(); - }); - - it('should exist', function() { - view = initView(); - expect(view).toBeDefined(); - }); - - it('switch between slides', function() { - view = initView(); - expect($('.slide1').hasClass('hidden')).toEqual(true); - view.switchToSlideOne(); - expect($('.slide1').hasClass('hidden')).toEqual(false); - expect($('.slide2').hasClass('hidden')).toEqual(true); - view.switchToSlideTwo(); - expect($('.slide2').hasClass('hidden')).toEqual(true); - }); - }); -} -); diff --git a/lms/static/lms/js/build.js b/lms/static/lms/js/build.js index b4a74f5a52c..c2141007e05 100644 --- a/lms/static/lms/js/build.js +++ b/lms/static/lms/js/build.js @@ -32,7 +32,6 @@ 'js/groups/views/cohorts_dashboard_factory', 'js/discussions_management/views/discussions_dashboard_factory', 'js/header_factory', - 'js/learner_dashboard/unenrollment_factory', 'js/learner_dashboard/program_details_factory', 'js/learner_dashboard/program_list_factory', 'js/student_account/logistration_factory', diff --git a/lms/static/lms/js/spec/main.js b/lms/static/lms/js/spec/main.js index 954a9626068..e377f28e31b 100644 --- a/lms/static/lms/js/spec/main.js +++ b/lms/static/lms/js/spec/main.js @@ -759,7 +759,6 @@ 'js/spec/learner_dashboard/program_details_header_spec.js', 'js/spec/learner_dashboard/program_details_view_spec.js', 'js/spec/learner_dashboard/program_details_sidebar_view_spec.js', - 'js/spec/learner_dashboard/unenroll_view_spec.js', 'js/spec/learner_dashboard/course_card_view_spec.js', 'js/spec/learner_dashboard/course_enroll_view_spec.js', 'js/spec/markdown_editor_spec.js', diff --git a/lms/static/sass/multicourse/_dashboard.scss b/lms/static/sass/multicourse/_dashboard.scss index d27b5be8af8..0b3c9e4752b 100644 --- a/lms/static/sass/multicourse/_dashboard.scss +++ b/lms/static/sass/multicourse/_dashboard.scss @@ -1498,55 +1498,3 @@ a.fade-cover{ } } } - -#unenroll-modal { - margin-top: -60px; -} - -.reasons_survey { - padding: 20px; - - .options { - list-style: none; - padding: 0; - } - - .option { - margin-bottom: 10px; - display: block; - } - - input { - margin-right: 10px; - } - - .unenroll-header { - background-image: none; - } - - .other_text { - margin-top: 0; - } - - .other_radio { - margin-top: 10px; - } - - .submit_reasons { - margin-top: 10px; - } - - .survey_button { - width: 30%; - margin-top: 10px; - margin-left: 2.5%; - margin-right: 2.5%; - color: $white; - } - - .survey_button:visited, .survey_button:hover, .survey_button:focus { - color: $white; - text-decoration: none; - } - -} diff --git a/lms/templates/dashboard.html b/lms/templates/dashboard.html index 13765bdd021..552d815e3b1 100644 --- a/lms/templates/dashboard.html +++ b/lms/templates/dashboard.html @@ -42,17 +42,6 @@ from openedx.core.djangolib.markup import HTML, Text }); }); </script> - <%static:require_module module_name="js/learner_dashboard/unenrollment_factory" class_name="UnenrollmentFactory"> - UnenrollmentFactory({ - urls: { - dashboard: "${reverse('dashboard') | n, js_escaped_string}", - signInUser: "${reverse('signin_user') | n, js_escaped_string}", - changeEmailSettings: "${reverse('change_email_settings') | n, js_escaped_string}", - browseCourses: "${marketing_link('COURSES') | n, js_escaped_string}" - }, - isEdx: false - }); - </%static:require_module> % if settings.FEATURES.get('ENABLE_DASHBOARD_SEARCH'): <%static:require_module module_name="course_search/js/dashboard_search_factory" class_name="DashboardSearchFactory"> DashboardSearchFactory(); @@ -255,7 +244,7 @@ from openedx.core.djangolib.markup import HTML, Text </span> </button> - <header class="unenroll-header"> + <header> <h2 id="unenrollment-modal-title"> <span id='track-info'></span> <span id='refund-info'></span> diff --git a/lms/templates/dashboard/_dashboard_course_listing.html b/lms/templates/dashboard/_dashboard_course_listing.html index 943d6fd347c..ec2874228d2 100644 --- a/lms/templates/dashboard/_dashboard_course_listing.html +++ b/lms/templates/dashboard/_dashboard_course_listing.html @@ -220,7 +220,6 @@ from util.course import get_link_for_about_page, get_encoded_course_sharing_utm_ <div class="actions-dropdown" id="actions-dropdown-${dashboard_index}" tabindex="-1"> <ul class="actions-dropdown-list" id="actions-dropdown-list-${dashboard_index}" aria-label="${_('Available Actions')}" role="menu"> % if can_unenroll: - <%include file='_reason_survey.html' args='course_overview=course_overview' /> <li class="actions-item" id="actions-item-unenroll-${dashboard_index}"> <% course_refund_url = reverse('course_run_refund_status', args=[unicode(course_overview.id)]) %> % if not is_course_blocked: diff --git a/lms/templates/dashboard/_reason_survey.html b/lms/templates/dashboard/_reason_survey.html deleted file mode 100644 index b0fffb0b54f..00000000000 --- a/lms/templates/dashboard/_reason_survey.html +++ /dev/null @@ -1,37 +0,0 @@ -<%page args="course_overview" expression_filter="h"/> -<%! -import urllib - -from django.utils.translation import ugettext as _ -%> -<div class="reasons_survey"> - <div class="slide1 hidden"> - <h3>${_("We're sorry to see you go! Please share your main reason for unenrolling.")}</h3><br> - <ul class="options"> - <li><label class="option"><input type="radio" name="reason" val="I just wanted to browse the material">${_('I just wanted to browse the material')}</label></li> - <li><label class="option"><input type="radio" name="reason" val="This won’t help me reach my goals">${_("This won't help me reach my goals")}</label></li> - <li><label class="option"><input type="radio" name="reason" val="I don't have the time">${_("I don't have the time")}</label></li> - <li><label class="option"><input type="radio" name="reason" val="I don’t have the academic or language prerequisites">${_("I don't have the academic or language prerequisites")}</label></li> - <li><label class="option"><input type="radio" name="reason" val="I don't have enough support">${_("I don't have enough support")}</label></li> - <li><label class="option"><input type="radio" name="reason" val="I am not happy with the quality of the content">${_('I am not happy with the quality of the content')}</label></li> - <li><label class="option"><input type="radio" name="reason" val="The course material was too hard">${_('The course material was too hard')}</label></li> - <li><label class="option"><input type="radio" name="reason" val="The course material was too easy">${_('The course material was too easy')}</label></li> - <li><label class="option"><input type="radio" name="reason" val="Something was broken">${_('Something was broken')}</label></li> - <li><label class="option"><input class="other_radio" type="radio" name="reason" val="Other">${_('Other')} <input type="text" class="other_text"/></label></li> - </ul> - <button class="submit_reasons">${_('Submit')}</button> - </div> -</div> -<div class="slide2 hidden"> - ${_('Thank you for sharing your reasons for unenrolling.')}<br> - ${_('You are unenrolled from')} ${course_overview.display_name_with_default}. - - <div> - <a class="button survey_button return_to_dashboard"> - ${_('Return To Dashboard')} - </a> - <a class="button survey_button browse_courses"> - ${_('Browse Courses')} - </a> - </div> -</div> diff --git a/themes/edx.org/lms/templates/dashboard.html b/themes/edx.org/lms/templates/dashboard.html index deaf0cb4844..e6d9ee4bd62 100644 --- a/themes/edx.org/lms/templates/dashboard.html +++ b/themes/edx.org/lms/templates/dashboard.html @@ -43,17 +43,6 @@ from openedx.core.djangoapps.theming import helpers as theming_helpers }); }); </script> - <%static:require_module module_name="js/learner_dashboard/unenrollment_factory" class_name="UnenrollmentFactory"> - UnenrollmentFactory({ - urls: { - dashboard: "${reverse('dashboard') | n, js_escaped_string}", - signInUser: "${reverse('signin_user') | n, js_escaped_string}", - changeEmailSettings: "${reverse('change_email_settings') | n, js_escaped_string}", - browseCourses: "${marketing_link('COURSES') | n, js_escaped_string}" - }, - isEdx: true - }); - </%static:require_module> % if settings.FEATURES.get('ENABLE_DASHBOARD_SEARCH'): <%static:require_module module_name="course_search/js/dashboard_search_factory" class_name="DashboardSearchFactory"> DashboardSearchFactory(); @@ -269,7 +258,7 @@ from openedx.core.djangoapps.theming import helpers as theming_helpers </span> </button> - <header class="unenroll-header"> + <header> <h2 id="unenrollment-modal-title"> <span id='track-info'></span> <span id='refund-info'></span> -- GitLab