WL-398 Add Course Background Image and Video Thumbnail Image Fields to Studio
This commit is contained in:
@@ -58,6 +58,10 @@ class CourseDetails(object):
|
||||
self.license = "all-rights-reserved" # default course license is all rights reserved
|
||||
self.course_image_name = ""
|
||||
self.course_image_asset_path = "" # URL of the course image
|
||||
self.banner_image_name = ""
|
||||
self.banner_image_asset_path = ""
|
||||
self.video_thumbnail_image_name = ""
|
||||
self.video_thumbnail_image_asset_path = ""
|
||||
self.pre_requisite_courses = [] # pre-requisite courses
|
||||
self.entrance_exam_enabled = "" # is entrance exam enabled
|
||||
self.entrance_exam_id = "" # the content location for the entrance exam
|
||||
@@ -97,7 +101,11 @@ class CourseDetails(object):
|
||||
course_details.enrollment_end = descriptor.enrollment_end
|
||||
course_details.pre_requisite_courses = descriptor.pre_requisite_courses
|
||||
course_details.course_image_name = descriptor.course_image
|
||||
course_details.course_image_asset_path = course_image_url(descriptor)
|
||||
course_details.course_image_asset_path = course_image_url(descriptor, 'course_image')
|
||||
course_details.banner_image_name = descriptor.banner_image
|
||||
course_details.banner_image_asset_path = course_image_url(descriptor, 'banner_image')
|
||||
course_details.video_thumbnail_image_name = descriptor.video_thumbnail_image
|
||||
course_details.video_thumbnail_image_asset_path = course_image_url(descriptor, 'video_thumbnail_image')
|
||||
course_details.language = descriptor.language
|
||||
course_details.self_paced = descriptor.self_paced
|
||||
|
||||
@@ -217,6 +225,15 @@ class CourseDetails(object):
|
||||
descriptor.course_image = jsondict['course_image_name']
|
||||
dirty = True
|
||||
|
||||
if 'banner_image_name' in jsondict and jsondict['banner_image_name'] != descriptor.banner_image:
|
||||
descriptor.banner_image = jsondict['banner_image_name']
|
||||
dirty = True
|
||||
|
||||
if 'video_thumbnail_image_name' in jsondict \
|
||||
and jsondict['video_thumbnail_image_name'] != descriptor.video_thumbnail_image:
|
||||
descriptor.video_thumbnail_image = jsondict['video_thumbnail_image_name']
|
||||
dirty = True
|
||||
|
||||
if 'pre_requisite_courses' in jsondict \
|
||||
and sorted(jsondict['pre_requisite_courses']) != sorted(descriptor.pre_requisite_courses):
|
||||
descriptor.pre_requisite_courses = jsondict['pre_requisite_courses']
|
||||
|
||||
@@ -95,6 +95,16 @@ class CourseDetailsTestCase(ModuleStoreTestCase):
|
||||
CourseDetails.update_from_json(self.course.id, jsondetails.__dict__, self.user).course_image_name,
|
||||
jsondetails.course_image_name
|
||||
)
|
||||
jsondetails.banner_image_name = "an_image.jpg"
|
||||
self.assertEqual(
|
||||
CourseDetails.update_from_json(self.course.id, jsondetails.__dict__, self.user).banner_image_name,
|
||||
jsondetails.banner_image_name
|
||||
)
|
||||
jsondetails.video_thumbnail_image_name = "an_image.jpg"
|
||||
self.assertEqual(
|
||||
CourseDetails.update_from_json(self.course.id, jsondetails.__dict__, self.user).video_thumbnail_image_name,
|
||||
jsondetails.video_thumbnail_image_name
|
||||
)
|
||||
jsondetails.language = "hr"
|
||||
self.assertEqual(
|
||||
CourseDetails.update_from_json(self.course.id, jsondetails.__dict__, self.user).language,
|
||||
|
||||
@@ -10,24 +10,25 @@ from xmodule.modulestore.django import modulestore
|
||||
from xmodule.modulestore import ModuleStoreEnum
|
||||
|
||||
|
||||
def course_image_url(course):
|
||||
def course_image_url(course, image_key='course_image'):
|
||||
"""Try to look up the image url for the course. If it's not found,
|
||||
log an error and return the dead link"""
|
||||
log an error and return the dead link.
|
||||
image_key can be one of the three: 'course_image', 'hero_image', 'thumbnail_image' """
|
||||
if course.static_asset_path or modulestore().get_modulestore_type(course.id) == ModuleStoreEnum.Type.xml:
|
||||
# If we are a static course with the course_image attribute
|
||||
# If we are a static course with the image_key attribute
|
||||
# set different than the default, return that path so that
|
||||
# courses can use custom course image paths, otherwise just
|
||||
# return the default static path.
|
||||
url = '/static/' + (course.static_asset_path or getattr(course, 'data_dir', ''))
|
||||
if hasattr(course, 'course_image') and course.course_image != course.fields['course_image'].default:
|
||||
url += '/' + course.course_image
|
||||
if hasattr(course, image_key) and getattr(course, image_key) != course.fields[image_key].default:
|
||||
url += '/' + getattr(course, image_key)
|
||||
else:
|
||||
url += '/images/course_image.jpg'
|
||||
elif not course.course_image:
|
||||
# if course_image is empty, use the default image url from settings
|
||||
url += '/images/' + image_key + '.jpg'
|
||||
elif not getattr(course, image_key):
|
||||
# if image_key is empty, use the default image url from settings
|
||||
url = settings.STATIC_URL + settings.DEFAULT_COURSE_ABOUT_IMAGE_URL
|
||||
else:
|
||||
loc = StaticContent.compute_location(course.id, course.course_image)
|
||||
loc = StaticContent.compute_location(course.id, getattr(course, image_key))
|
||||
url = StaticContent.serialize_asset_key_with_slash(loc)
|
||||
|
||||
return url
|
||||
|
||||
@@ -65,3 +65,21 @@ class CourseImageTestCase(ModuleStoreTestCase):
|
||||
'static/test.png',
|
||||
course_image_url(course),
|
||||
)
|
||||
|
||||
def test_get_banner_image_url(self):
|
||||
"""Test banner image URL formatting."""
|
||||
banner_image = u'banner_image.jpg'
|
||||
course = CourseFactory.create(banner_image=banner_image)
|
||||
self.verify_url(
|
||||
unicode(course.id.make_asset_key('asset', banner_image)),
|
||||
course_image_url(course, 'banner_image')
|
||||
)
|
||||
|
||||
def test_get_video_thumbnail_image_url(self):
|
||||
"""Test video thumbnail image URL formatting."""
|
||||
thumbnail_image = u'thumbnail_image.jpg'
|
||||
course = CourseFactory.create(video_thumbnail_image=thumbnail_image)
|
||||
self.verify_url(
|
||||
unicode(course.id.make_asset_key('asset', thumbnail_image)),
|
||||
course_image_url(course, 'video_thumbnail_image')
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user