Merge branch 'release'
This commit is contained in:
@@ -2,15 +2,16 @@
|
||||
Tests course_creators.views.py.
|
||||
"""
|
||||
|
||||
from django.test import TestCase
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.test import TestCase, RequestFactory
|
||||
|
||||
from course_creators.views import add_user_with_status_unrequested, add_user_with_status_granted
|
||||
from course_creators.views import get_course_creator_status, update_course_creator_group, user_requested_access
|
||||
import mock
|
||||
from student.roles import CourseCreatorRole
|
||||
from student import auth
|
||||
from edxmako.tests import mako_middleware_process_request
|
||||
|
||||
|
||||
class CourseCreatorView(TestCase):
|
||||
@@ -70,6 +71,11 @@ class CourseCreatorView(TestCase):
|
||||
def test_user_requested_access(self):
|
||||
add_user_with_status_unrequested(self.user)
|
||||
self.assertEqual('unrequested', get_course_creator_status(self.user))
|
||||
|
||||
request = RequestFactory().get('/')
|
||||
request.user = self.user
|
||||
|
||||
mako_middleware_process_request(request)
|
||||
user_requested_access(self.user)
|
||||
self.assertEqual('pending', get_course_creator_status(self.user))
|
||||
|
||||
|
||||
@@ -12,15 +12,20 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import threading
|
||||
from django.template import RequestContext
|
||||
from util.request import safe_get_host
|
||||
requestcontext = None
|
||||
|
||||
REQUEST_CONTEXT = threading.local()
|
||||
|
||||
|
||||
class MakoMiddleware(object):
|
||||
|
||||
def process_request(self, request):
|
||||
global requestcontext
|
||||
requestcontext = RequestContext(request)
|
||||
requestcontext['is_secure'] = request.is_secure()
|
||||
requestcontext['site'] = safe_get_host(request)
|
||||
REQUEST_CONTEXT.context = RequestContext(request)
|
||||
REQUEST_CONTEXT.context['is_secure'] = request.is_secure()
|
||||
REQUEST_CONTEXT.context['site'] = safe_get_host(request)
|
||||
|
||||
def process_response(self, request, response):
|
||||
REQUEST_CONTEXT.context = None
|
||||
return response
|
||||
|
||||
@@ -92,8 +92,8 @@ def render_to_string(template_name, dictionary, context=None, namespace='main'):
|
||||
context_instance['marketing_link'] = marketing_link
|
||||
|
||||
# In various testing contexts, there might not be a current request context.
|
||||
if edxmako.middleware.requestcontext is not None:
|
||||
for d in edxmako.middleware.requestcontext:
|
||||
if edxmako.middleware.REQUEST_CONTEXT.context is not None:
|
||||
for d in edxmako.middleware.REQUEST_CONTEXT.context:
|
||||
context_dictionary.update(d)
|
||||
for d in context_instance:
|
||||
context_dictionary.update(d)
|
||||
|
||||
@@ -48,8 +48,8 @@ class Template(MakoTemplate):
|
||||
context_dictionary = {}
|
||||
|
||||
# In various testing contexts, there might not be a current request context.
|
||||
if edxmako.middleware.requestcontext is not None:
|
||||
for d in edxmako.middleware.requestcontext:
|
||||
if edxmako.middleware.REQUEST_CONTEXT.context is not None:
|
||||
for d in edxmako.middleware.REQUEST_CONTEXT.context:
|
||||
context_dictionary.update(d)
|
||||
for d in context_instance:
|
||||
context_dictionary.update(d)
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
|
||||
from mock import patch, Mock
|
||||
from django.http import HttpResponse
|
||||
from django.test import TestCase
|
||||
from django.test.utils import override_settings
|
||||
from django.test.client import RequestFactory
|
||||
from django.core.urlresolvers import reverse
|
||||
import edxmako.middleware
|
||||
from edxmako import add_lookup, LOOKUP
|
||||
from edxmako.shortcuts import marketing_link
|
||||
from mock import patch
|
||||
from student.tests.factories import UserFactory
|
||||
from util.testing import UrlResetMixin
|
||||
|
||||
|
||||
@@ -37,3 +42,40 @@ class AddLookupTests(TestCase):
|
||||
dirs = LOOKUP['test'].directories
|
||||
self.assertEqual(len(dirs), 1)
|
||||
self.assertTrue(dirs[0].endswith('management'))
|
||||
|
||||
|
||||
class MakoMiddlewareTest(TestCase):
|
||||
"""
|
||||
Test MakoMiddleware.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
self.middleware = edxmako.middleware.MakoMiddleware()
|
||||
self.user = UserFactory.create()
|
||||
self.url = "/"
|
||||
self.request = RequestFactory().get(self.url)
|
||||
self.request.user = self.user
|
||||
self.response = Mock(spec=HttpResponse)
|
||||
|
||||
def test_clear_request_context_variable(self):
|
||||
"""
|
||||
Test the global variable requestcontext is cleared correctly
|
||||
when response middleware is called.
|
||||
"""
|
||||
|
||||
self.middleware.process_request(self.request)
|
||||
# requestcontext should not be None.
|
||||
self.assertIsNotNone(edxmako.middleware.REQUEST_CONTEXT.context)
|
||||
|
||||
self.middleware.process_response(self.request, self.response)
|
||||
# requestcontext should be None.
|
||||
self.assertIsNone(edxmako.middleware.REQUEST_CONTEXT.context)
|
||||
|
||||
|
||||
def mako_middleware_process_request(request):
|
||||
"""
|
||||
Initialize the global RequestContext variable
|
||||
edxmako.middleware.requestcontext using the request object.
|
||||
"""
|
||||
mako_middleware = edxmako.middleware.MakoMiddleware()
|
||||
mako_middleware.process_request(request)
|
||||
|
||||
@@ -27,6 +27,7 @@ from external_auth.views import shib_login, course_specific_login, course_specif
|
||||
from student.views import create_account, change_enrollment
|
||||
from student.models import UserProfile, Registration, CourseEnrollment
|
||||
from student.tests.factories import UserFactory
|
||||
from edxmako.tests import mako_middleware_process_request
|
||||
|
||||
TEST_DATA_MIXED_MODULESTORE = mixed_store_config(settings.COMMON_TEST_DATA_ROOT, {})
|
||||
|
||||
@@ -91,6 +92,9 @@ class ShibSPTest(ModuleStoreTestCase):
|
||||
"""
|
||||
no_remote_user_request = self.request_factory.get('/shib-login')
|
||||
no_remote_user_request.META.update({'Shib-Identity-Provider': IDP})
|
||||
no_remote_user_request.user = AnonymousUser()
|
||||
|
||||
mako_middleware_process_request(no_remote_user_request)
|
||||
no_remote_user_response = shib_login(no_remote_user_request)
|
||||
self.assertEqual(no_remote_user_response.status_code, 403)
|
||||
self.assertIn("identity server did not return your ID information", no_remote_user_response.content)
|
||||
@@ -155,6 +159,8 @@ class ShibSPTest(ModuleStoreTestCase):
|
||||
'REMOTE_USER': remote_user,
|
||||
'mail': remote_user})
|
||||
request.user = AnonymousUser()
|
||||
|
||||
mako_middleware_process_request(request)
|
||||
with patch('external_auth.views.AUDIT_LOG') as mock_audit_log:
|
||||
response = shib_login(request)
|
||||
audit_log_calls = mock_audit_log.method_calls
|
||||
@@ -315,6 +321,8 @@ class ShibSPTest(ModuleStoreTestCase):
|
||||
request2 = self.request_factory.post('/create_account', data=postvars)
|
||||
request2.session = client.session
|
||||
request2.user = AnonymousUser()
|
||||
|
||||
mako_middleware_process_request(request2)
|
||||
with patch('student.views.AUDIT_LOG') as mock_audit_log:
|
||||
_response2 = create_account(request2)
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
import json
|
||||
import django.db
|
||||
import unittest
|
||||
@@ -12,6 +13,7 @@ from mock import Mock, patch
|
||||
from django.http import Http404, HttpResponse
|
||||
from django.conf import settings
|
||||
from edxmako.shortcuts import render_to_string
|
||||
from edxmako.tests import mako_middleware_process_request
|
||||
from util.request import safe_get_host
|
||||
from textwrap import dedent
|
||||
|
||||
@@ -93,9 +95,11 @@ class ReactivationEmailTests(EmailTestMixin, TestCase):
|
||||
|
||||
# Thorough tests for safe_get_host are elsewhere; here we just want a quick URL sanity check
|
||||
request = RequestFactory().post('unused_url')
|
||||
request.user = self.user
|
||||
request.META['HTTP_HOST'] = "aGenericValidHostName"
|
||||
self.append_allowed_hosts("aGenericValidHostName")
|
||||
|
||||
mako_middleware_process_request(request)
|
||||
body = render_to_string('emails/activation_email.txt', context)
|
||||
host = safe_get_host(request)
|
||||
|
||||
@@ -248,9 +252,11 @@ class EmailChangeConfirmationTests(EmailTestMixin, TransactionTestCase):
|
||||
|
||||
# Thorough tests for safe_get_host are elsewhere; here we just want a quick URL sanity check
|
||||
request = RequestFactory().post('unused_url')
|
||||
request.user = self.user
|
||||
request.META['HTTP_HOST'] = "aGenericValidHostName"
|
||||
self.append_allowed_hosts("aGenericValidHostName")
|
||||
|
||||
mako_middleware_process_request(request)
|
||||
body = render_to_string('emails/confirm_email_change.txt', context)
|
||||
url = safe_get_host(request)
|
||||
|
||||
|
||||
@@ -6,12 +6,14 @@ import json
|
||||
from django.test import TestCase
|
||||
from django.test.client import RequestFactory
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.contrib.auth.models import AnonymousUser
|
||||
from django.utils.importlib import import_module
|
||||
from django.test.utils import override_settings
|
||||
from django.conf import settings
|
||||
from mock import patch
|
||||
from student.views import create_account
|
||||
from edxmako.tests import mako_middleware_process_request
|
||||
from external_auth.models import ExternalAuthMap
|
||||
from student.views import create_account
|
||||
|
||||
@patch.dict("django.conf.settings.FEATURES", {'ENFORCE_PASSWORD_POLICY': True})
|
||||
class TestPasswordPolicy(TestCase):
|
||||
@@ -255,6 +257,9 @@ class TestPasswordPolicy(TestCase):
|
||||
internal_password=self.url_params['password'],
|
||||
external_domain='shib:https://idp.stanford.edu/')
|
||||
request.session['ExternalAuthMap'] = extauth
|
||||
request.user = AnonymousUser()
|
||||
|
||||
mako_middleware_process_request(request)
|
||||
response = create_account(request)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
obj = json.loads(response.content)
|
||||
|
||||
@@ -13,6 +13,7 @@ from django.contrib.messages.storage import fallback
|
||||
from django.contrib.sessions.backends import cache
|
||||
from django.test import utils as django_utils
|
||||
from django.conf import settings as django_settings
|
||||
from edxmako.tests import mako_middleware_process_request
|
||||
from social import actions, exceptions
|
||||
from social.apps.django_app import utils as social_utils
|
||||
from social.apps.django_app import views as social_views
|
||||
@@ -420,6 +421,8 @@ class IntegrationTest(testutil.TestCase, test.TestCase):
|
||||
self.client.get(
|
||||
pipeline.get_login_url(self.PROVIDER_CLASS.NAME, pipeline.AUTH_ENTRY_LOGIN))
|
||||
actions.do_complete(strategy, social_views._do_login) # pylint: disable-msg=protected-access
|
||||
|
||||
mako_middleware_process_request(strategy.request)
|
||||
student_views.signin_user(strategy.request)
|
||||
student_views.login_user(strategy.request)
|
||||
actions.do_complete(strategy, social_views._do_login) # pylint: disable-msg=protected-access
|
||||
@@ -453,6 +456,8 @@ class IntegrationTest(testutil.TestCase, test.TestCase):
|
||||
self.client.get(
|
||||
pipeline.get_login_url(self.PROVIDER_CLASS.NAME, pipeline.AUTH_ENTRY_LOGIN))
|
||||
actions.do_complete(strategy, social_views._do_login) # pylint: disable-msg=protected-access
|
||||
|
||||
mako_middleware_process_request(strategy.request)
|
||||
student_views.signin_user(strategy.request)
|
||||
student_views.login_user(strategy.request)
|
||||
actions.do_complete(strategy, social_views._do_login, user=user) # pylint: disable-msg=protected-access
|
||||
@@ -508,6 +513,8 @@ class IntegrationTest(testutil.TestCase, test.TestCase):
|
||||
self.client.get('/login')
|
||||
self.client.get(pipeline.get_login_url(self.PROVIDER_CLASS.NAME, pipeline.AUTH_ENTRY_LOGIN))
|
||||
actions.do_complete(strategy, social_views._do_login) # pylint: disable-msg=protected-access
|
||||
|
||||
mako_middleware_process_request(strategy.request)
|
||||
student_views.signin_user(strategy.request)
|
||||
student_views.login_user(strategy.request)
|
||||
actions.do_complete(strategy, social_views._do_login, user=user) # pylint: disable-msg=protected-access
|
||||
@@ -547,6 +554,7 @@ class IntegrationTest(testutil.TestCase, test.TestCase):
|
||||
# pylint: disable-msg=protected-access
|
||||
self.assert_redirect_to_login_looks_correct(actions.do_complete(strategy, social_views._do_login))
|
||||
|
||||
mako_middleware_process_request(strategy.request)
|
||||
# At this point we know the pipeline has resumed correctly. Next we
|
||||
# fire off the view that displays the login form and posts it via JS.
|
||||
self.assert_login_response_in_pipeline_looks_correct(student_views.signin_user(strategy.request))
|
||||
@@ -568,6 +576,7 @@ class IntegrationTest(testutil.TestCase, test.TestCase):
|
||||
user.is_active = False
|
||||
user.save()
|
||||
|
||||
mako_middleware_process_request(strategy.request)
|
||||
self.assert_json_failure_response_is_inactive_account(student_views.login_user(strategy.request))
|
||||
|
||||
def test_signin_fails_if_no_account_associated(self):
|
||||
@@ -613,6 +622,7 @@ class IntegrationTest(testutil.TestCase, test.TestCase):
|
||||
# pylint:disable-msg=protected-access
|
||||
self.assert_redirect_to_register_looks_correct(actions.do_complete(strategy, social_views._do_login))
|
||||
|
||||
mako_middleware_process_request(strategy.request)
|
||||
# At this point we know the pipeline has resumed correctly. Next we
|
||||
# fire off the view that displays the registration form.
|
||||
self.assert_register_response_in_pipeline_looks_correct(
|
||||
@@ -672,6 +682,8 @@ class IntegrationTest(testutil.TestCase, test.TestCase):
|
||||
strategy.backend.auth_complete = mock.MagicMock(return_value=self.fake_auth_complete(strategy))
|
||||
# pylint:disable-msg=protected-access
|
||||
self.assert_redirect_to_register_looks_correct(actions.do_complete(strategy, social_views._do_login))
|
||||
|
||||
mako_middleware_process_request(strategy.request)
|
||||
self.assert_register_response_in_pipeline_looks_correct(
|
||||
student_views.register_user(strategy.request), pipeline.get(request)['kwargs'])
|
||||
strategy.request.POST = self.get_registration_post_vars()
|
||||
|
||||
@@ -15,6 +15,7 @@ from xmodule.modulestore.tests.factories import CourseFactory
|
||||
from courseware.tests.tests import TEST_DATA_MONGO_MODULESTORE
|
||||
import student.views
|
||||
from branding.views import index
|
||||
from edxmako.tests import mako_middleware_process_request
|
||||
|
||||
FEATURES_WITH_STARTDATE = settings.FEATURES.copy()
|
||||
FEATURES_WITH_STARTDATE['DISABLE_START_DATES'] = False
|
||||
@@ -45,6 +46,8 @@ class AnonymousIndexPageTest(ModuleStoreTestCase):
|
||||
"""
|
||||
request = self.factory.get('/')
|
||||
request.user = AnonymousUser()
|
||||
|
||||
mako_middleware_process_request(request)
|
||||
student.views.index(request)
|
||||
|
||||
@override_settings(FEATURES=FEATURES_WITH_STARTDATE)
|
||||
|
||||
@@ -20,6 +20,7 @@ from django.core.urlresolvers import reverse
|
||||
from student.models import CourseEnrollment
|
||||
from student.tests.factories import AdminFactory
|
||||
from edxmako.middleware import MakoMiddleware
|
||||
from edxmako.tests import mako_middleware_process_request
|
||||
|
||||
from opaque_keys.edx.locations import Location
|
||||
from xmodule.modulestore.django import modulestore
|
||||
@@ -413,6 +414,8 @@ class TestProgressDueDate(BaseDueDateTests):
|
||||
|
||||
def get_text(self, course):
|
||||
""" Returns the HTML for the progress page """
|
||||
|
||||
mako_middleware_process_request(self.request)
|
||||
return views.progress(self.request, course.id.to_deprecated_string(), self.user.id).content
|
||||
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ from django.test.utils import override_settings
|
||||
from django.test.client import Client, RequestFactory
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
from student.tests.factories import UserFactory, CourseEnrollmentFactory
|
||||
from edxmako.tests import mako_middleware_process_request
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from django.core.urlresolvers import reverse
|
||||
from util.testing import UrlResetMixin
|
||||
@@ -276,6 +277,8 @@ class UserProfileTestCase(ModuleStoreTestCase):
|
||||
mock_request.side_effect = make_mock_request_impl(self.TEST_THREAD_TEXT, self.TEST_THREAD_ID)
|
||||
request = RequestFactory().get("dummy_url", data=params, **headers)
|
||||
request.user = self.student
|
||||
|
||||
mako_middleware_process_request(request)
|
||||
response = views.user_profile(
|
||||
request,
|
||||
self.course.id.to_deprecated_string(),
|
||||
|
||||
@@ -9,6 +9,7 @@ from markupsafe import escape
|
||||
|
||||
from courseware.tests.tests import TEST_DATA_MIXED_MODULESTORE
|
||||
from student.tests.factories import UserFactory, CourseEnrollmentFactory
|
||||
from edxmako.tests import mako_middleware_process_request
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
|
||||
@@ -48,6 +49,8 @@ class TestXss(ModuleStoreTestCase):
|
||||
)
|
||||
req.user = self._instructor
|
||||
req.session = {}
|
||||
|
||||
mako_middleware_process_request(req)
|
||||
resp = legacy.instructor_dashboard(req, self._course.id.to_deprecated_string())
|
||||
respUnicode = resp.content.decode(settings.DEFAULT_CHARSET)
|
||||
self.assertNotIn(self._evil_student.profile.name, respUnicode)
|
||||
|
||||
@@ -11,6 +11,7 @@ from mock import Mock, patch
|
||||
from notification_prefs import NOTIFICATION_PREF_KEY
|
||||
from notification_prefs.views import ajax_enable, ajax_disable, ajax_status, set_subscription, UsernameCipher
|
||||
from student.tests.factories import UserFactory
|
||||
from edxmako.tests import mako_middleware_process_request
|
||||
from user_api.models import UserPreference
|
||||
from util.testing import UrlResetMixin
|
||||
|
||||
@@ -220,6 +221,8 @@ class NotificationPrefViewTest(UrlResetMixin, TestCase):
|
||||
def test_user(user):
|
||||
request = self.request_factory.get("dummy")
|
||||
request.user = AnonymousUser()
|
||||
|
||||
mako_middleware_process_request(request)
|
||||
response = set_subscription(request, self.tokens[user], subscribe=False)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertNotPrefExists(user)
|
||||
@@ -231,6 +234,8 @@ class NotificationPrefViewTest(UrlResetMixin, TestCase):
|
||||
self.create_prefs()
|
||||
request = self.request_factory.get("dummy")
|
||||
request.user = AnonymousUser()
|
||||
|
||||
mako_middleware_process_request(request)
|
||||
set_subscription(request, self.tokens[self.user], False)
|
||||
response = set_subscription(request, self.tokens[self.user], subscribe=False)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -242,6 +247,8 @@ class NotificationPrefViewTest(UrlResetMixin, TestCase):
|
||||
self.assertFalse(UserPreference.objects.filter(user=user, key=NOTIFICATION_PREF_KEY))
|
||||
request = self.request_factory.get("dummy")
|
||||
request.user = AnonymousUser()
|
||||
|
||||
mako_middleware_process_request(request)
|
||||
response = set_subscription(request, self.tokens[user], subscribe=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertPrefValid(user)
|
||||
|
||||
@@ -3,6 +3,7 @@ Tests for open ended grading interfaces
|
||||
|
||||
./manage.py lms --settings test test lms/djangoapps/open_ended_grading
|
||||
"""
|
||||
from django.test import RequestFactory
|
||||
|
||||
import json
|
||||
import logging
|
||||
@@ -29,6 +30,7 @@ from courseware.tests.modulestore_config import TEST_DATA_MIXED_MODULESTORE
|
||||
from lms.lib.xblock.runtime import LmsModuleSystem
|
||||
from student.roles import CourseStaffRole
|
||||
from edxmako.shortcuts import render_to_string
|
||||
from edxmako.tests import mako_middleware_process_request
|
||||
from student.models import unique_id_for_user
|
||||
|
||||
from open_ended_grading import staff_grading_service, views, utils
|
||||
@@ -471,7 +473,12 @@ class TestPanel(ModuleStoreTestCase):
|
||||
Ensure that the problem list from the grading controller server can be rendered properly locally
|
||||
@return:
|
||||
"""
|
||||
request = Mock(user=self.user)
|
||||
request = RequestFactory().get(
|
||||
reverse("open_ended_problems", kwargs={'course_id': self.course_key})
|
||||
)
|
||||
request.user = self.user
|
||||
|
||||
mako_middleware_process_request(request)
|
||||
response = views.student_problem_list(request, self.course.id.to_deprecated_string())
|
||||
self.assertRegexpMatches(response.content, "Here is a list of open ended problems for this course.")
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
<th class="c_code">${_("Code")}</th>
|
||||
<th class="c_dsc">${_("Description")}</th>
|
||||
<th class="c_course_id">${_("Course_id")}</th>
|
||||
<th class="c_discount">${_("Discount(%)")}</th>
|
||||
<th class="c_discount">${_("Discount (%)")}</th>
|
||||
<th class="c_count">${_("Count")}</th>
|
||||
<th class="c_action">${_("Actions")}</th>
|
||||
</tr>
|
||||
@@ -120,7 +120,7 @@
|
||||
</div>
|
||||
<script>
|
||||
$(function () {
|
||||
|
||||
|
||||
var icons = {
|
||||
header: "ui-icon-circle-arrow-e",
|
||||
activeHeader: "ui-icon-circle-arrow-s"
|
||||
@@ -140,7 +140,7 @@
|
||||
active:isNaN(parseInt($.cookie('saved_index'))) ? 0 : parseInt($.cookie('saved_index')),
|
||||
collapsible: true
|
||||
});
|
||||
|
||||
|
||||
$('a[rel*=leanModal]').leanModal();
|
||||
$.each($("a.edit-right"), function () {
|
||||
if ($(this).parent().parent('tr').hasClass('inactive_coupon')) {
|
||||
@@ -211,7 +211,7 @@
|
||||
// Get the Code and Discount value and trim it
|
||||
var code = $.trim($('#edit_coupon_code').val());
|
||||
var coupon_discount = $.trim($('#edit_coupon_discount').val());
|
||||
|
||||
|
||||
// Check if empty of not
|
||||
if (code === '') {
|
||||
$('#edit_coupon_form #coupon_form_error').attr('style', 'display: block !important');
|
||||
@@ -249,7 +249,7 @@
|
||||
// Get the Code and Discount value and trim it
|
||||
var course_price = $.trim($('#mode_price').val());
|
||||
var currency = $.trim($('#course_mode_currency').val());
|
||||
|
||||
|
||||
// Check if empty of not
|
||||
if (course_price === '') {
|
||||
$('#set_price_form #course_form_error').attr('style', 'display: block !important');
|
||||
@@ -275,7 +275,7 @@
|
||||
// Get the Code and Discount value and trim it
|
||||
var code = $.trim($('#coupon_code').val());
|
||||
var coupon_discount = $.trim($('#coupon_discount').val());
|
||||
|
||||
|
||||
// Check if empty of not
|
||||
if (code === '') {
|
||||
$("#add_coupon_button").removeAttr('disabled');
|
||||
@@ -302,7 +302,7 @@
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$('#set_price_form').on('ajax:complete', function (event, xhr) {
|
||||
if (xhr.status == 200) {
|
||||
location.reload(true);
|
||||
@@ -312,7 +312,7 @@
|
||||
$('#set_price_form #course_form_error').text(xhr.responseText);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$('#add_coupon_form').on('ajax:complete', function (event, xhr) {
|
||||
if (xhr.status == 200) {
|
||||
location.reload(true);
|
||||
@@ -322,7 +322,7 @@
|
||||
$('#add_coupon_form #coupon_form_error').text(xhr.responseText);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$('#edit_coupon_form').on('ajax:complete', function (event, xhr) {
|
||||
if (xhr.status == 200) {
|
||||
location.reload(true);
|
||||
@@ -340,7 +340,7 @@
|
||||
reset_input_fields();
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
|
||||
var onModalClose = function () {
|
||||
$("#add-coupon-modal").attr("aria-hidden", "true");
|
||||
$(".remove_coupon").focus();
|
||||
@@ -352,7 +352,7 @@
|
||||
$("#update_coupon_button").removeAttr('disabled');
|
||||
reset_input_fields();
|
||||
};
|
||||
|
||||
|
||||
var cycle_modal_tab = function (from_element_name, to_element_name) {
|
||||
$(from_element_name).on('keydown', function (e) {
|
||||
var keyCode = e.keyCode || e.which;
|
||||
@@ -363,12 +363,12 @@
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
$("#add-coupon-modal .close-modal").click(onModalClose);
|
||||
$("#edit-coupon-modal .close-modal").click(onModalClose);
|
||||
$("#set-course-mode-price-modal .close-modal").click(reset_input_fields);
|
||||
|
||||
|
||||
|
||||
|
||||
// Hitting the ESC key will exit the modal
|
||||
$("#add-coupon-modal, #edit-coupon-modal, #set-course-mode-price-modal").on("keydown", function (e) {
|
||||
var keyCode = e.keyCode || e.which;
|
||||
@@ -391,6 +391,6 @@
|
||||
$('input#coupon_code').val('');
|
||||
$('input#coupon_discount').val('');
|
||||
$('textarea#coupon_description').val('');
|
||||
|
||||
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
-e git+https://github.com/edx/bok-choy.git@9162c0bfb8e0eb1e2fa8e6df8dec12d181322a90#egg=bok_choy
|
||||
-e git+https://github.com/edx-solutions/django-splash.git@9965a53c269666a30bb4e2b3f6037c138aef2a55#egg=django-splash
|
||||
-e git+https://github.com/edx/acid-block.git@459aff7b63db8f2c5decd1755706c1a64fb4ebb1#egg=acid-xblock
|
||||
-e git+https://github.com/edx/edx-ora2.git@release-2014-07-28T12.09#egg=edx-ora2
|
||||
-e git+https://github.com/edx/edx-ora2.git@hotfix-2014-08-06#egg=edx-ora2
|
||||
-e git+https://github.com/edx/opaque-keys.git@454bd984d9539550c6290020e92ee2d6094038d0#egg=opaque-keys
|
||||
-e git+https://github.com/edx/ease.git@97de68448e5495385ba043d3091f570a699d5b5f#egg=ease
|
||||
-e git+https://github.com/edx/i18n-tools.git@f5303e82dff368c7595884d9325aeea1d802da25#egg=i18n-tools
|
||||
|
||||
Reference in New Issue
Block a user