Commit cba888c6 by Don Mitchell

Merge pull request #1212 from MITx/fix/cdodge/handout-links

Fix/cdodge/handout links
parents bd8661a8 6d20292a
import logging import logging
from static_replace import replace_urls
from xmodule.modulestore.exceptions import ItemNotFoundError from xmodule.modulestore.exceptions import ItemNotFoundError
from xmodule.modulestore import Location from xmodule.modulestore import Location
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
...@@ -7,7 +7,7 @@ from lxml import etree ...@@ -7,7 +7,7 @@ from lxml import etree
import re import re
from django.http import HttpResponseBadRequest, Http404 from django.http import HttpResponseBadRequest, Http404
def get_module_info(store, location, parent_location = None): def get_module_info(store, location, parent_location = None, rewrite_static_links = False):
try: try:
if location.revision is None: if location.revision is None:
module = store.get_item(location) module = store.get_item(location)
...@@ -16,9 +16,13 @@ def get_module_info(store, location, parent_location = None): ...@@ -16,9 +16,13 @@ def get_module_info(store, location, parent_location = None):
except ItemNotFoundError: except ItemNotFoundError:
raise Http404 raise Http404
data = module.definition['data']
if rewrite_static_links:
data = replace_urls(module.definition['data'], course_namespace = Location([module.location.tag, module.location.org, module.location.course, None, None]))
return { return {
'id': module.location.url(), 'id': module.location.url(),
'data': module.definition['data'], 'data': data,
'metadata': module.metadata 'metadata': module.metadata
} }
......
...@@ -7,6 +7,7 @@ from django.conf import settings ...@@ -7,6 +7,7 @@ from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from path import path from path import path
from tempfile import mkdtemp from tempfile import mkdtemp
import json
from student.models import Registration from student.models import Registration
from django.contrib.auth.models import User from django.contrib.auth.models import User
...@@ -417,6 +418,29 @@ class ContentStoreTest(TestCase): ...@@ -417,6 +418,29 @@ class ContentStoreTest(TestCase):
shutil.rmtree(root_dir) shutil.rmtree(root_dir)
def test_course_handouts_rewrites(self):
ms = modulestore('direct')
cs = contentstore()
import_from_xml(ms, 'common/test/data/', ['full'])
handout_location= Location(['i4x', 'edX', 'full', 'course_info', 'handouts'])
resp = self.client.get(reverse('module_info', kwargs={'module_location': handout_location}))
self.assertEqual(resp.status_code, 200)
# check that /static/ has been converted to the full path
self.assertContains(resp, '/c4x/edX/full/asset/handouts_schematic_tutorial.pdf')
...@@ -1009,14 +1009,17 @@ def module_info(request, module_location): ...@@ -1009,14 +1009,17 @@ def module_info(request, module_location):
if request.method == 'POST' and 'HTTP_X_HTTP_METHOD_OVERRIDE' in request.META: if request.method == 'POST' and 'HTTP_X_HTTP_METHOD_OVERRIDE' in request.META:
real_method = request.META['HTTP_X_HTTP_METHOD_OVERRIDE'] real_method = request.META['HTTP_X_HTTP_METHOD_OVERRIDE']
else: else:
real_method = request.method real_method = request.method
rewrite_static_links = request.GET.get('rewrite_url_links','True') in ['True', 'true']
logging.debug('rewrite_static_links = {0} {1}'.format(request.GET.get('rewrite_url_links','False'), rewrite_static_links))
# check that logged in user has permissions to this item # check that logged in user has permissions to this item
if not has_access(request.user, location): if not has_access(request.user, location):
raise PermissionDenied() raise PermissionDenied()
if real_method == 'GET': if real_method == 'GET':
return HttpResponse(json.dumps(get_module_info(get_modulestore(location), location)), mimetype="application/json") return HttpResponse(json.dumps(get_module_info(get_modulestore(location), location, rewrite_static_links=rewrite_static_links)), mimetype="application/json")
elif real_method == 'POST' or real_method == 'PUT': elif real_method == 'POST' or real_method == 'PUT':
return HttpResponse(json.dumps(set_module_info(get_modulestore(location), location, request.POST)), mimetype="application/json") return HttpResponse(json.dumps(set_module_info(get_modulestore(location), location, request.POST)), mimetype="application/json")
else: else:
......
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