diff --git a/cms/djangoapps/contentstore/views/assets.py b/cms/djangoapps/contentstore/views/assets.py index 478e5a6107..64be433de1 100644 --- a/cms/djangoapps/contentstore/views/assets.py +++ b/cms/djangoapps/contentstore/views/assets.py @@ -35,6 +35,35 @@ from .access import get_location_and_verify_access __all__ = ['asset_index', 'upload_asset', 'import_course', 'generate_export_course', 'export_course'] +def assets_to_json_dict(assets): + ret = [] + for asset in assets: + obj = { + "name": asset.get("displayname", ""), + "chunkSize": asset.get("chunkSize", 0), + "path": asset.get("filename", ""), + "length": asset.get("length", 0), + } + uploaded = asset.get("uploadDate") + if uploaded: + obj["uploaded"] = uploaded.isoformat() + thumbnail = asset.get("thumbnail_location") + if thumbnail: + obj["thumbnail"] = thumbnail + idInfo = asset.get("_id") + if idInfo: + obj["id"] = "/{tag}/{org}/{course}/{revision}/{category}/{name}".format( + org=idInfo.get("org", ""), + course=idInfo.get("course", ""), + revision=idInfo.get("revision", ""), + tag=idInfo.get("tag", ""), + category=idInfo.get("category", ""), + name=idInfo.get("name", ""), + ) + ret.append(obj) + return ret + + @login_required @ensure_csrf_cookie def asset_index(request, org, course, name): @@ -59,6 +88,9 @@ def asset_index(request, org, course, name): # sort in reverse upload date order assets = sorted(assets, key=lambda asset: asset['uploadDate'], reverse=True) + if request.META.get('HTTP_ACCEPT', "").startswith("application/json"): + return HttpResponse(json.dumps(assets_to_json_dict(assets)), content_type="application/json") + asset_display = [] for asset in assets: asset_id = asset['_id'] diff --git a/cms/djangoapps/contentstore/views/course.py b/cms/djangoapps/contentstore/views/course.py index 6d45d5f62a..0293421bea 100644 --- a/cms/djangoapps/contentstore/views/course.py +++ b/cms/djangoapps/contentstore/views/course.py @@ -16,6 +16,9 @@ from xmodule.modulestore.exceptions import ( ItemNotFoundError, InvalidLocationError) from xmodule.modulestore import Location +from xmodule.contentstore.django import contentstore +from xmodule.contentstore.content import StaticContent + from contentstore.course_info_model import ( get_course_updates, update_course_updates, delete_course_update) from contentstore.utils import ( @@ -29,6 +32,7 @@ from auth.authz import create_all_course_groups, is_user_in_creator_group from util.json_request import expect_json from .access import has_access, get_location_and_verify_access +from .assets import assets_to_json_dict from .requests import get_request_method from .tabs import initialize_course_tabs from .component import ( @@ -424,13 +428,23 @@ def textbook_index(request, org, course, name): upload_asset_callback_url = reverse('upload_asset', kwargs={ 'org': org, 'course': course, - 'coursename': name + 'coursename': name, + }) + asset_index_url = reverse('asset_index', kwargs={ + 'org': org, + 'course': course, + 'name': name, }) + course_reference = StaticContent.compute_location(org, course, name) + assets_db_objs = contentstore().get_all_content_for_course(course_reference) + assets_json_objs = assets_to_json_dict(assets_db_objs) location = get_location_and_verify_access(request, org, course, name) - course = modulestore().get_item(location, depth=3) + course_obj = modulestore().get_item(location, depth=3) return render_to_response('textbooks.html', { - 'context_course': course, - 'course': course, + 'context_course': course_obj, + 'course': course_obj, + 'assets': assets_json_objs, 'upload_asset_callback_url': upload_asset_callback_url, + 'asset_index_url': asset_index_url, }) diff --git a/cms/templates/textbooks.html b/cms/templates/textbooks.html index 273d399566..930757b37f 100644 --- a/cms/templates/textbooks.html +++ b/cms/templates/textbooks.html @@ -1,5 +1,6 @@ <%inherit file="base.html" /> <%namespace name='static' file='static_content.html'/> +<%! import json %> <%block name="title">Textbooks <%block name="bodyclass">is-signedin course textbooks @@ -25,6 +26,7 @@ <%block name="jsextra">