diff --git a/cms/djangoapps/contentstore/views/preview.py b/cms/djangoapps/contentstore/views/preview.py index 8401935c3d..b604fc9555 100644 --- a/cms/djangoapps/contentstore/views/preview.py +++ b/cms/djangoapps/contentstore/views/preview.py @@ -95,6 +95,20 @@ class PreviewModuleSystem(ModuleSystem): # pylint: disable=abstract-method return local_resource_url(block, uri) +class StudioUserService(object): + """ + Provides a Studio implementation of the XBlock user service. + """ + + def __init__(self, request): + super(StudioUserService, self).__init__() + self._request = request + + @property + def user_id(self): + return self._request.user.id + + def _preview_module_system(request, descriptor): """ Returns a ModuleSystem for the specified descriptor that is specialized for @@ -139,6 +153,7 @@ def _preview_module_system(request, descriptor): descriptor_runtime=descriptor.runtime, services={ "i18n": ModuleI18nService(), + "user": StudioUserService(request), }, ) diff --git a/common/lib/xmodule/xmodule/split_test_module.py b/common/lib/xmodule/xmodule/split_test_module.py index 35154f7466..6d16adedc5 100644 --- a/common/lib/xmodule/xmodule/split_test_module.py +++ b/common/lib/xmodule/xmodule/split_test_module.py @@ -343,6 +343,7 @@ class SplitTestModule(SplitTestFields, XModule, StudioEditableModule): @XBlock.needs('user_tags') # pylint: disable=abstract-method @XBlock.wants('partitions') +@XBlock.needs('user') class SplitTestDescriptor(SplitTestFields, SequenceDescriptor, StudioEditableDescriptor): # the editing interface can be the same as for sequences -- just a container module_class = SplitTestModule @@ -553,7 +554,8 @@ class SplitTestDescriptor(SplitTestFields, SequenceDescriptor, StudioEditableDes for group in user_partition.groups: str_group_id = unicode(group.id) if str_group_id not in self.group_id_to_child: - self._create_vertical_for_group(group, request.user.id) + user_id = self.runtime.service(self, 'user').user_id + self._create_vertical_for_group(group, user_id) changed = True if changed: