Commit ca6da2db by Diana Huang

Add discussion information to learner context.

parent 5f5df7e7
...@@ -483,6 +483,64 @@ def _create_discussion_board_context(request, base_context, thread=None): ...@@ -483,6 +483,64 @@ def _create_discussion_board_context(request, base_context, thread=None):
return context return context
def create_user_profile_context(request, course_key, user_id):
""" Generate a context dictionary for the user profile. """
user = cc.User.from_django_user(request.user)
course = get_course_with_access(request.user, 'load', course_key, check_if_enrolled=True)
# If user is not enrolled in the course, do not proceed.
django_user = User.objects.get(id=user_id)
if not CourseEnrollment.is_enrolled(django_user, course.id):
raise Http404
query_params = {
'page': request.GET.get('page', 1),
'per_page': THREADS_PER_PAGE, # more than threads_per_page to show more activities
}
group_id = get_group_id_for_comments_service(request, course_key)
if group_id is not None:
query_params['group_id'] = group_id
profiled_user = cc.User(id=user_id, course_id=course_key, group_id=group_id)
else:
profiled_user = cc.User(id=user_id, course_id=course_key)
threads, page, num_pages = profiled_user.active_threads(query_params)
query_params['page'] = page
query_params['num_pages'] = num_pages
with function_trace("get_metadata_for_threads"):
user_info = cc.User.from_django_user(request.user).to_dict()
annotated_content_info = utils.get_metadata_for_threads(course_key, threads, request.user, user_info)
is_staff = has_permission(request.user, 'openclose_thread', course.id)
threads = [utils.prepare_content(thread, course_key, is_staff) for thread in threads]
with function_trace("add_courseware_context"):
add_courseware_context(threads, course, request.user)
user_roles = django_user.roles.filter(
course_id=course.id
).order_by("name").values_list("name", flat=True).distinct()
with function_trace("get_cohort_info"):
course_discussion_settings = get_course_discussion_settings(course_key)
user_group_id = get_group_id_for_user(request.user, course_discussion_settings)
context = _create_base_discussion_view_context(request, course_key)
context.update({
'django_user': django_user,
'django_user_roles': user_roles,
'profiled_user': profiled_user.to_dict(),
'threads': threads,
'user_group_id': user_group_id,
'annotated_content_info': annotated_content_info,
'page': query_params['page'],
'num_pages': query_params['num_pages'],
'sort_preference': user.default_sort_key,
'learner_profile_page_url': reverse('learner_profile', kwargs={'username': django_user.username}),
})
return context
@require_GET @require_GET
@login_required @login_required
@use_bulk_ops @use_bulk_ops
...@@ -491,75 +549,22 @@ def user_profile(request, course_key, user_id): ...@@ -491,75 +549,22 @@ def user_profile(request, course_key, user_id):
Renders a response to display the user profile page (shown after clicking Renders a response to display the user profile page (shown after clicking
on a post author's username). on a post author's username).
""" """
user = cc.User.from_django_user(request.user)
course = get_course_with_access(request.user, 'load', course_key, check_if_enrolled=True)
try: try:
# If user is not enrolled in the course, do not proceed. context = create_user_profile_context(request, course_key, user_id)
django_user = User.objects.get(id=user_id)
if not CourseEnrollment.is_enrolled(django_user, course.id):
raise Http404
query_params = {
'page': request.GET.get('page', 1),
'per_page': THREADS_PER_PAGE, # more than threads_per_page to show more activities
}
try:
group_id = get_group_id_for_comments_service(request, course_key)
except ValueError:
return HttpResponseServerError("Invalid group_id")
if group_id is not None:
query_params['group_id'] = group_id
profiled_user = cc.User(id=user_id, course_id=course_key, group_id=group_id)
else:
profiled_user = cc.User(id=user_id, course_id=course_key)
threads, page, num_pages = profiled_user.active_threads(query_params)
query_params['page'] = page
query_params['num_pages'] = num_pages
with function_trace("get_metadata_for_threads"):
user_info = cc.User.from_django_user(request.user).to_dict()
annotated_content_info = utils.get_metadata_for_threads(course_key, threads, request.user, user_info)
is_staff = has_permission(request.user, 'openclose_thread', course.id)
threads = [utils.prepare_content(thread, course_key, is_staff) for thread in threads]
with function_trace("add_courseware_context"):
add_courseware_context(threads, course, request.user)
if request.is_ajax(): if request.is_ajax():
return utils.JsonResponse({ return utils.JsonResponse({
'discussion_data': threads, 'discussion_data': context['threads'],
'page': query_params['page'], 'page': context['page'],
'num_pages': query_params['num_pages'], 'num_pages': context['num_pages'],
'annotated_content_info': annotated_content_info, 'annotated_content_info': context['annotated_content_info'],
}) })
else: else:
user_roles = django_user.roles.filter( print context
course_id=course.id
).order_by("name").values_list("name", flat=True).distinct()
with function_trace("get_cohort_info"):
course_discussion_settings = get_course_discussion_settings(course_key)
user_group_id = get_group_id_for_user(request.user, course_discussion_settings)
context = _create_base_discussion_view_context(request, course_key)
context.update({
'django_user': django_user,
'django_user_roles': user_roles,
'profiled_user': profiled_user.to_dict(),
'threads': threads,
'user_group_id': user_group_id,
'annotated_content_info': annotated_content_info,
'page': query_params['page'],
'num_pages': query_params['num_pages'],
'sort_preference': user.default_sort_key,
'learner_profile_page_url': reverse('learner_profile', kwargs={'username': django_user.username}),
})
return render_to_response('discussion/discussion_profile_page.html', context) return render_to_response('discussion/discussion_profile_page.html', context)
except User.DoesNotExist: except User.DoesNotExist:
raise Http404 raise Http404
except ValueError:
return HttpResponseServerError("Invalid group_id")
@login_required @login_required
......
...@@ -61,6 +61,7 @@ from openedx.features.course_experience import course_home_page_title ...@@ -61,6 +61,7 @@ from openedx.features.course_experience import course_home_page_title
'schedule': assignment_schedule, 'schedule': assignment_schedule,
'grading_policy': grading_policy, 'grading_policy': grading_policy,
'grades': assignment_grades, 'grades': assignment_grades,
'discussion_info': discussion_info,
} }
)} )}
</div> </div>
......
...@@ -16,8 +16,8 @@ from django.views.generic import View ...@@ -16,8 +16,8 @@ from django.views.generic import View
from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.keys import CourseKey
from lms.djangoapps.course_api.blocks.api import get_blocks from lms.djangoapps.course_api.blocks.api import get_blocks
from lms.djangoapps.courseware.courses import get_course_with_access from lms.djangoapps.courseware.courses import get_course_with_access
from lms.djangoapps.discussion.views import create_user_profile_context
from lms.djangoapps.grades.course_grade_factory import CourseGradeFactory from lms.djangoapps.grades.course_grade_factory import CourseGradeFactory
from openedx.core.djangoapps.plugin_api.views import EdxFragmentView
from openedx.features.course_experience import default_course_url_name from openedx.features.course_experience import default_course_url_name
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
from util.views import ensure_valid_course_key from util.views import ensure_valid_course_key
...@@ -51,7 +51,8 @@ class LearnerAnalyticsView(View): ...@@ -51,7 +51,8 @@ class LearnerAnalyticsView(View):
'uses_pattern_library': True, 'uses_pattern_library': True,
'grading_policy': course.grading_policy, 'grading_policy': course.grading_policy,
'assignment_grades': self.get_grade_data(request.user, course_key), 'assignment_grades': self.get_grade_data(request.user, course_key),
'assignment_schedule': self.get_schedule(request, course_key) 'assignment_schedule': self.get_schedule(request, course_key),
'discussion_info': self.get_discussion_data(request, course_key)
} }
return render_to_response('learner_analytics/dashboard.html', context) return render_to_response('learner_analytics/dashboard.html', context)
...@@ -74,7 +75,7 @@ class LearnerAnalyticsView(View): ...@@ -74,7 +75,7 @@ class LearnerAnalyticsView(View):
} }
return json.dumps(grades) return json.dumps(grades)
def get_discussion_data(self, user, course_key): def get_discussion_data(self, request, course_key):
""" """
Collects and formats the discussion data from a particular user and course. Collects and formats the discussion data from a particular user and course.
...@@ -82,7 +83,8 @@ class LearnerAnalyticsView(View): ...@@ -82,7 +83,8 @@ class LearnerAnalyticsView(View):
user: User user: User
course_key: CourseKey course_key: CourseKey
""" """
pass discussion_data = create_user_profile_context(request, course_key, request.user.id)
return json.dumps(discussion_data)
def get_schedule(self, request, course_key): def get_schedule(self, request, course_key):
""" """
......
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