65 lines
2.3 KiB
Python
65 lines
2.3 KiB
Python
"""
|
|
Decorators related to edXNotes.
|
|
"""
|
|
|
|
|
|
import json
|
|
|
|
from django.conf import settings
|
|
|
|
from common.djangoapps.edxmako.shortcuts import render_to_string
|
|
|
|
|
|
def edxnotes(cls):
|
|
"""
|
|
Decorator that makes components annotatable.
|
|
"""
|
|
original_get_html = cls.get_html
|
|
|
|
def get_html(self, *args, **kwargs):
|
|
"""
|
|
Returns raw html for the component.
|
|
"""
|
|
# Import is placed here to avoid model import at project startup.
|
|
from .helpers import (
|
|
generate_uid, get_edxnotes_id_token, get_public_endpoint, get_token_url, is_feature_enabled
|
|
)
|
|
|
|
runtime = getattr(self, 'descriptor', self).runtime
|
|
if not hasattr(runtime, 'modulestore'):
|
|
return original_get_html(self, *args, **kwargs)
|
|
|
|
is_studio = getattr(self.system, "is_author_mode", False)
|
|
course = getattr(self, 'descriptor', self).runtime.modulestore.get_course(self.runtime.course_id)
|
|
|
|
# Must be disabled when:
|
|
# - in Studio
|
|
# - Harvard Annotation Tool is enabled for the course
|
|
# - the feature flag or `edxnotes` setting of the course is set to False
|
|
# - the user is not authenticated
|
|
user = self.runtime.get_real_user(self.runtime.anonymous_student_id)
|
|
|
|
if is_studio or not is_feature_enabled(course, user):
|
|
return original_get_html(self, *args, **kwargs)
|
|
else:
|
|
return render_to_string("edxnotes_wrapper.html", {
|
|
"content": original_get_html(self, *args, **kwargs),
|
|
"uid": generate_uid(),
|
|
"edxnotes_visibility": json.dumps(
|
|
getattr(self, 'edxnotes_visibility', course.edxnotes_visibility)
|
|
),
|
|
"params": {
|
|
# Use camelCase to name keys.
|
|
"usageId": str(self.scope_ids.usage_id),
|
|
"courseId": str(self.runtime.course_id),
|
|
"token": get_edxnotes_id_token(user),
|
|
"tokenUrl": get_token_url(self.runtime.course_id),
|
|
"endpoint": get_public_endpoint(),
|
|
"debug": settings.DEBUG,
|
|
"eventStringLimit": settings.TRACK_MAX_EVENT / 6,
|
|
},
|
|
})
|
|
|
|
cls.get_html = get_html
|
|
return cls
|