${_("Instructor Dashboard")}
%if settings.FEATURES.get('IS_EDX_DOMAIN', False):
## Only show this banner on the edx.org website (other sites may choose to show this if they wish)
${_("You are using the legacy instructor dashboard, which we will retire in the near future.")} ${_("Return to the Instructor Dashboard")}
${_("If the Instructor Dashboard is missing functionality, please contact your PM to let us know.")}
%endif
##-----------------------------------------------------------------------------
%if msg:
${msg}
%endif
##-----------------------------------------------------------------------------
%if modeflag.get('Analytics'):
%if not any(analytics_results.values()):
${_("No Analytics are available at this time.")}
%endif
%if analytics_results.get("StudentsDropoffPerDay"):
${_("Student activity day by day")}
(${analytics_results["StudentsDropoffPerDay"]['time']})
| ${_("Day")} |
${_("Students")} |
%for row in analytics_results['StudentsDropoffPerDay']['data']:
## For now, just discard the non-date portion
| ${row['last_day'].split("T")[0]} |
${row['num_students']} |
%endfor
%endif
%if analytics_results.get("ProblemGradeDistribution"):
${_("Score distribution for problems")}
(${analytics_results["ProblemGradeDistribution"]['time']})
| ${_("Problem")} |
${_("Max")} |
${_("Points Earned (Num Students)")} |
%for row in analytics_results['ProblemGradeDistribution']['data']:
| ${row['block_id']} |
${max(grade_record['max_grade'] for grade_record in row["grade_info"])}
%for grade_record in row["grade_info"]:
|
%if isinstance(grade_record["grade"], float):
${"{grade:.2f}".format(**grade_record)}
%else:
${"{grade}".format(**grade_record)}
%endif
(${grade_record["num_students"]})
|
%endfor
%endfor
%endif
%endif
%if modeflag.get('Metrics'):
%if not any (metrics_results.values()):
${_("There is no data available to display at this time.")}
%else:
<%namespace name="d3_stacked_bar_graph" file="/class_dashboard/d3_stacked_bar_graph.js"/>
<%namespace name="all_section_metrics" file="/class_dashboard/all_section_metrics.js"/>
${_("Loading the latest graphs for you; depending on your class size, this may take a few minutes.")}
%for i in range(0,len(metrics_results['section_display_name'])):
${_("Section:")} ${metrics_results['section_display_name'][i]}
${_("Count of Students that Opened a Subsection")}
${_("Loading...")}
${_("Grade Distribution per Problem")}
%if not metrics_results['section_has_problem'][i]:
${_("There are no problems in this section.")}
%else:
${_("Loading...")}
%endif
%endfor
%endif
%endif
%if modeflag.get('Analytics In Progress'):
##This is not as helpful as it could be -- let's give full point distribution
##instead.
%if analytics_results.get("StudentsPerProblemCorrect"):
${_("Students answering correctly")}
(${analytics_results["StudentsPerProblemCorrect"]['time']})
%endif
${_("Student distribution per country, all courses, Sep 12 to Oct 17, 1 server (shown here as an example):")}
## Number of students who dropped off per day before becoming inactive:
##
## % if dropoff_per_day is not None:
## % if dropoff_per_day['status'] == 'success':
##
## % else:
## ${dropoff_per_day['error']}
## % endif
## % else:
## null data
## % endif
##
##
##
##
Daily activity (online version):
##
## | Day | Number of students |
## % for k,v in daily_activity_json['data'].items():
##
## | ${k} | ${v} |
##
## % endfor
##
##
%endif
##-----------------------------------------------------------------------------
%if datatable and modeflag.get('Psychometrics') is None:
${datatable['title'] | h}
%for hname in datatable['header']:
| ${hname | h} |
%endfor
%for row in datatable['data']:
%for value in row:
| ${value | h} |
%endfor
%endfor
%endif
## Output tasks in progress
%if instructor_tasks is not None and len(instructor_tasks) > 0:
${_("Pending Instructor Tasks")}
| ${_("Task Type")} |
${_("Task inputs")} |
${_("Task Id")} |
${_("Requester")} |
${_("Submitted")} |
${_("Task State")} |
${_("Duration (sec)")} |
${_("Task Progress")} |
%for tasknum, instructor_task in enumerate(instructor_tasks):
| ${instructor_task.task_type} |
${instructor_task.task_input} |
${instructor_task.task_id} |
${instructor_task.requester} |
${instructor_task.created} |
${instructor_task.task_state} |
${_("unknown")} |
${_("unknown")} |
%endfor
%endif
##-----------------------------------------------------------------------------
%if course_stats and modeflag.get('Psychometrics') is None:
${course_stats['title'] | h}
%for hname in course_stats['header']:
| ${hname | h} |
%endfor
%for row in course_stats['data']:
%for value in row:
| ${value | h} |
%endfor
%endfor
%endif
##-----------------------------------------------------------------------------
%if modeflag.get('Psychometrics'):
%for plot in plots:
${plot['title']}
${plot['info']}
%endfor
%endif
##-----------------------------------------------------------------------------
## always show msg
##-----------------------------------------------------------------------------
%if modeflag.get('Admin'):
% if course_errors is not UNDEFINED:
${_("Course errors")}
%if not course_errors:
None
%else:
% for (summary, err) in course_errors:
- ${summary | h}
% if err:
% else:
% endif
% endfor
%endif
% endif
%endif