From 197f9015aaced5a70273b88489735fa4894c93ef Mon Sep 17 00:00:00 2001
From: Adam Palay
Date: Tue, 24 Sep 2013 17:21:27 -0400
Subject: [PATCH] disable buttons for large courses on legacy and beta instr
dash
set max enrollment for downloads to 200
---
.../instructor/views/instructor_dashboard.py | 10 +++
lms/djangoapps/instructor/views/legacy.py | 65 +++++++++++--------
lms/envs/common.py | 4 ++
.../courseware/instructor_dashboard.html | 54 +++++++++++----
.../instructor_dashboard_2/data_download.html | 22 +++++--
.../instructor_dashboard_2/student_admin.html | 2 +-
6 files changed, 112 insertions(+), 45 deletions(-)
diff --git a/lms/djangoapps/instructor/views/instructor_dashboard.py b/lms/djangoapps/instructor/views/instructor_dashboard.py
index 9736a3d8a2..35f7257902 100644
--- a/lms/djangoapps/instructor/views/instructor_dashboard.py
+++ b/lms/djangoapps/instructor/views/instructor_dashboard.py
@@ -9,6 +9,7 @@ from mitxmako.shortcuts import render_to_response
from django.core.urlresolvers import reverse
from django.utils.html import escape
from django.http import Http404
+from django.conf import settings
from courseware.access import has_access
from courseware.courses import get_course_by_id
@@ -45,10 +46,19 @@ def instructor_dashboard_2(request, course_id):
_section_analytics(course_id),
]
+ enrollment_count = sections[0]['enrollment_count']
+
+ disable_buttons = False
+ max_enrollment_for_buttons = settings.MITX_FEATURES.get("MAX_ENROLLMENT_INSTR_BUTTONS")
+ if max_enrollment_for_buttons is not None:
+ disable_buttons = enrollment_count > max_enrollment_for_buttons
+
+
context = {
'course': course,
'old_dashboard_url': reverse('instructor_dashboard', kwargs={'course_id': course_id}),
'sections': sections,
+ 'disable_buttons': disable_buttons,
}
return render_to_response('instructor/instructor_dashboard_2/instructor_dashboard_2.html', context)
diff --git a/lms/djangoapps/instructor/views/legacy.py b/lms/djangoapps/instructor/views/legacy.py
index 61b43fa9cc..6d7e75baa4 100644
--- a/lms/djangoapps/instructor/views/legacy.py
+++ b/lms/djangoapps/instructor/views/legacy.py
@@ -105,12 +105,15 @@ def instructor_dashboard(request, course_id):
else:
idash_mode = request.session.get('idash_mode', 'Grades')
+ enrollment_number = CourseEnrollment.objects.filter(course_id=course_id, is_active=1).count()
+
# assemble some course statistics for output to instructor
def get_course_stats_table():
- datatable = {'header': ['Statistic', 'Value'],
- 'title': _u('Course Statistics At A Glance'),
- }
- data = [['# Enrolled', CourseEnrollment.objects.filter(course_id=course_id, is_active=1).count()]]
+ datatable = {
+ 'header': ['Statistic', 'Value'],
+ 'title': _u('Course Statistics At A Glance'),
+ }
+ data = [['# Enrolled', enrollment_number]]
data += [['Date', timezone.now().isoformat()]]
data += compute_course_stats(course).items()
if request.user.is_staff:
@@ -832,35 +835,43 @@ def instructor_dashboard(request, course_id):
if not datatable:
course_stats = get_course_stats_table()
+ # disable buttons for large courses
+ disable_buttons = False
+ max_enrollment_for_buttons = settings.MITX_FEATURES.get("MAX_ENROLLMENT_INSTR_BUTTONS")
+ if max_enrollment_for_buttons is not None:
+ disable_buttons = enrollment_number > max_enrollment_for_buttons
+
#----------------------------------------
# context for rendering
- context = {'course': course,
- 'staff_access': True,
- 'admin_access': request.user.is_staff,
- 'instructor_access': instructor_access,
- 'forum_admin_access': forum_admin_access,
- 'datatable': datatable,
- 'course_stats': course_stats,
- 'msg': msg,
- 'modeflag': {idash_mode: 'selectedmode'},
- 'studio_url': studio_url,
+ context = {
+ 'course': course,
+ 'staff_access': True,
+ 'admin_access': request.user.is_staff,
+ 'instructor_access': instructor_access,
+ 'forum_admin_access': forum_admin_access,
+ 'datatable': datatable,
+ 'course_stats': course_stats,
+ 'msg': msg,
+ 'modeflag': {idash_mode: 'selectedmode'},
+ 'studio_url': studio_url,
- 'to_option': email_to_option, # email
- 'subject': email_subject, # email
- 'editor': email_editor, # email
- 'email_msg': email_msg, # email
- 'show_email_tab': show_email_tab, # email
+ 'to_option': email_to_option, # email
+ 'subject': email_subject, # email
+ 'editor': email_editor, # email
+ 'email_msg': email_msg, # email
+ 'show_email_tab': show_email_tab, # email
- 'problems': problems, # psychometrics
- 'plots': plots, # psychometrics
- 'course_errors': modulestore().get_item_errors(course.location),
- 'instructor_tasks': instructor_tasks,
- 'offline_grade_log': offline_grades_available(course_id),
- 'cohorts_ajax_url': reverse('cohorts', kwargs={'course_id': course_id}),
+ 'problems': problems, # psychometrics
+ 'plots': plots, # psychometrics
+ 'course_errors': modulestore().get_item_errors(course.location),
+ 'instructor_tasks': instructor_tasks,
+ 'offline_grade_log': offline_grades_available(course_id),
+ 'cohorts_ajax_url': reverse('cohorts', kwargs={'course_id': course_id}),
- 'analytics_results': analytics_results,
- }
+ 'analytics_results': analytics_results,
+ 'disable_buttons': disable_buttons
+ }
if settings.MITX_FEATURES.get('ENABLE_INSTRUCTOR_BETA_DASHBOARD'):
context['beta_dashboard_url'] = reverse('instructor_dashboard_2', kwargs={'course_id': course_id})
diff --git a/lms/envs/common.py b/lms/envs/common.py
index 731c4f3c51..22047afb28 100644
--- a/lms/envs/common.py
+++ b/lms/envs/common.py
@@ -182,6 +182,10 @@ MITX_FEATURES = {
# Automatically approve student identity verification attempts
'AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING': False,
+
+ # Disable instructor dash buttons for downloading course data
+ # when enrollment exceeds this number
+ 'MAX_ENROLLMENT_INSTR_BUTTONS': 200,
}
# Used for A/B testing
diff --git a/lms/templates/courseware/instructor_dashboard.html b/lms/templates/courseware/instructor_dashboard.html
index 7b06d8e309..27f0b9bb08 100644
--- a/lms/templates/courseware/instructor_dashboard.html
+++ b/lms/templates/courseware/instructor_dashboard.html
@@ -150,31 +150,46 @@ function goto( mode)
%endif
+
+
+ ${_("Grade Downloads")}
+ % if disable_buttons:
+
+ ${_("Note: some of these buttons are known to time out for larger "
+ "courses. We have temporarily disabled those features for courses "
+ "with more than {max_enrollment} students. We are urgently working on "
+ "fixing this issue. Thank you for your patience as we continue "
+ "working to improve the platform!").format(
+ max_enrollment=settings.MITX_FEATURES['MAX_ENROLLMENT_INSTR_BUTTONS']
+ )}
+
+ % endif
+
- ${_("Gradebook")}
+ ${_("Gradebook")}
- ${_("Grade summary")}
+ ${_("Grade summary")}
-
+
-
-
+
+
-
-
+
+
-
-
+
+
@@ -369,9 +384,22 @@ function goto( mode)
%if modeflag.get('Enrollment'):
-
-
-
+
${_("Enrollment Data")}
+ % if disable_buttons:
+
+ ${_("Note: some of these buttons are known to time out for larger "
+ "courses. We have temporarily disabled those features for courses "
+ "with more than {max_enrollment} students. We are urgently working on "
+ "fixing this issue. Thank you for your patience as we continue "
+ "working to improve the platform!").format(
+ max_enrollment=settings.MITX_FEATURES['MAX_ENROLLMENT_INSTR_BUTTONS']
+ )}
+
+
+ % endif
+
+
+
%if settings.MITX_FEATURES.get('REMOTE_GRADEBOOK_URL','') and instructor_access:
@@ -392,7 +420,7 @@ function goto( mode)
%endif
-
+ ${_("Batch Enrollment")}
${_("Enroll or un-enroll one or many students: enter emails, separated by new lines or commas;")}
diff --git a/lms/templates/instructor/instructor_dashboard_2/data_download.html b/lms/templates/instructor/instructor_dashboard_2/data_download.html
index c9f15bdca4..74c98e7dbc 100644
--- a/lms/templates/instructor/instructor_dashboard_2/data_download.html
+++ b/lms/templates/instructor/instructor_dashboard_2/data_download.html
@@ -1,8 +1,23 @@
<%! from django.utils.translation import ugettext as _ %>
<%page args="section_data"/>
-
-
+
+
${_("Data Download")}
+% if disable_buttons:
+
+ ${_("Note: some of these buttons are known to time out for larger "
+ "courses. We have temporarily disabled those features for courses "
+ "with more than {max_enrollment} students. We are urgently working on "
+ "fixing this issue. Thank you for your patience as we continue "
+ "working to improve the platform!").format(
+ max_enrollment=settings.MITX_FEATURES['MAX_ENROLLMENT_INSTR_BUTTONS']
+ )}
+
+
+% endif
+
+
+
##
##
@@ -10,8 +25,7 @@
##
##
-
-
+
diff --git a/lms/templates/instructor/instructor_dashboard_2/student_admin.html b/lms/templates/instructor/instructor_dashboard_2/student_admin.html
index b21942bd23..2ae60789df 100644
--- a/lms/templates/instructor/instructor_dashboard_2/student_admin.html
+++ b/lms/templates/instructor/instructor_dashboard_2/student_admin.html
@@ -79,7 +79,7 @@
%if settings.MITX_FEATURES.get('ENABLE_INSTRUCTOR_BACKGROUND_TASKS') and section_data['access']['instructor']:
-
${_('Course-specific grade adjustment')}
+
${_('Course-specific grade adjustment')}