<%inherit file="/main.html" /> <%! from django.core.urlresolvers import reverse %> <%namespace name='static' file='/static_content.html'/> <%block name="headextra"> <%static:css group='course'/> %if instructor_tasks is not None: > %endif <%include file="/courseware/course_navigation.html" args="active_page='instructor'" />

Instructor Dashboard

[ Grades | %if settings.MITX_FEATURES.get('ENABLE_PSYCHOMETRICS'): Psychometrics | %endif Admin | Forum Admin | Enrollment | DataDump | Manage Groups %if settings.MITX_FEATURES.get('ENABLE_INSTRUCTOR_ANALYTICS'): | Analytics %endif ]

${djangopid} | ${mitx_version}
##----------------------------------------------------------------------------- %if modeflag.get('Grades'): %if offline_grade_log:

Pre-computed grades ${offline_grade_log} available: Use?

%endif

Gradebook

Grade summary


%if settings.MITX_FEATURES.get('REMOTE_GRADEBOOK_URL','') and instructor_access: <% rg = course.remote_gradebook %>

Export grades to remote gradebook

The assignments defined for this course should match the ones stored in the gradebook, for this to work properly!

  • Gradebook name: ${rg.get('name','None defined!')}





  • Assignment name:


%endif %if settings.MITX_FEATURES.get('ENABLE_INSTRUCTOR_BACKGROUND_TASKS'):

Course-specific grade adjustment

Specify a particular problem in the course here by its url:

You may use just the "urlname" if a problem, or "modulename/urlname" if not. (For example, if the location is i4x://university/course/problem/problemname, then just provide the problemname. If the location is i4x://university/course/notaproblem/someothername, then provide notaproblem/someothername.)

Then select an action:

These actions run in the background, and status for active tasks will appear in a table below. To see status for all tasks submitted for this problem, click on this button:


%endif

Student-specific grade inspection and adjustment

Specify the edX email address or username of a student here:

Click this, and a link to student's progress page will appear below:

Specify a particular problem in the course here by its url:

You may use just the "urlname" if a problem, or "modulename/urlname" if not. (For example, if the location is i4x://university/course/problem/problemname, then just provide the problemname. If the location is i4x://university/course/notaproblem/someothername, then provide notaproblem/someothername.)

Then select an action: %if settings.MITX_FEATURES.get('ENABLE_COURSE_BACKGROUND_TASKS'): %endif

%if instructor_access:

You may also delete the entire state of a student for the specified module:

%endif %if settings.MITX_FEATURES.get('ENABLE_COURSE_BACKGROUND_TASKS'):

Rescoring runs in the background, and status for active tasks will appear in a table below. To see status for all tasks submitted for this course and student, click on this button:

%endif %endif ##----------------------------------------------------------------------------- %if modeflag.get('Psychometrics'):

Select a problem and an action:

%endif ##----------------------------------------------------------------------------- %if modeflag.get('Admin'): %if instructor_access:


%endif %if admin_access:


%endif %if settings.MITX_FEATURES['ENABLE_MANUAL_GIT_RELOAD'] and admin_access:

%endif %endif ##----------------------------------------------------------------------------- %if modeflag.get('Forum Admin'): %if instructor_access:



%endif %if instructor_access or forum_admin_access:


%else:

User requires forum administrator privileges to perform administration tasks. See instructor.

%endif %endif ##----------------------------------------------------------------------------- %if modeflag.get('Enrollment'):


%if settings.MITX_FEATURES.get('REMOTE_GRADEBOOK_URL','') and instructor_access: <% rg = course.remote_gradebook %>

Pull enrollment from remote gradebook

  • Gradebook name: ${rg.get('name','None defined!')}
  • Section:

%endif

Enroll or un-enroll one or many students: enter emails, separated by new lines or commas;

Auto-enroll students when they activate

%endif ##----------------------------------------------------------------------------- %if modeflag.get('Data'):


Problem urlname:


%endif ##----------------------------------------------------------------------------- %if modeflag.get('Manage Groups'): %if instructor_access:

Enter usernames or emails for students who should be beta-testers, one per line, or separated by commas. They will get to see course materials early, as configured via the days_early_for_beta option in the course policy.


%if course.is_cohorted: <%include file="/course_groups/cohort_management.html" /> %endif %endif %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("StudentsEnrolled"):

Students enrolled: ${analytics_results["StudentsEnrolled"]['data'][0]['students']}

%endif %if analytics_results.get("StudentsActive"):

Students active in the last week: ${analytics_results["StudentsActive"]['data'][0]['active']}

%endif %if analytics_results.get("StudentsDropoffPerDay"):

Student activity day by day

%for row in analytics_results['StudentsDropoffPerDay']['data']: ## For now, just discard the non-date portion %endfor
Day Students
${row['last_day'].split("T")[0]} ${row['num_students']}
%endif
%if analytics_results.get("ProblemGradeDistribution"):

Answer distribution for problems

%for row in analytics_results['ProblemGradeDistribution']['data']: %endfor %endfor
Problem Max Points Earned (Num Students)
${row['module_id'].split('/')[-1]} ${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"]})
%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

%for row in analytics_results['StudentsPerProblemCorrect']['data']: %endfor
Problem Number of students
${row['module_id'].split('/')[-1]} ${row['count']}
%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': ##
## ## ## % for k,v in dropoff_per_day['data'].items(): ## ## % endfor ##
DayNumber of students
${k} ${v}
##
## % else: ## ${dropoff_per_day['error']} ## % endif ## % else: ## null data ## % endif ##

## ##

##

Daily activity (online version):

## ## ## % for k,v in daily_activity_json['data'].items(): ## ## ## ## % endfor ##
DayNumber of students
${k} ${v}
##

%endif ##----------------------------------------------------------------------------- %if datatable and modeflag.get('Psychometrics') is None:


${datatable['title'] | h}

%for hname in datatable['header']: %endfor %for row in datatable['data']: %for value in row: %endfor %endfor
${hname | h}
${value | h}

%endif ## Output tasks in progress %if instructor_tasks is not None and len(instructor_tasks) > 0:

Pending Instructor Tasks

%for tasknum, instructor_task in enumerate(instructor_tasks): %endfor
Task Type Task inputs Task Id Requester Submitted Task State Duration (sec) Task Progress
${instructor_task.task_type} ${instructor_task.task_input} ${instructor_task.task_id} ${instructor_task.requester} ${instructor_task.created} ${instructor_task.task_state} unknown unknown

%endif ##----------------------------------------------------------------------------- %if course_stats and modeflag.get('Psychometrics') is None:


${course_stats['title'] | h}

%for hname in course_stats['header']: %endfor %for row in course_stats['data']: %for value in row: %endfor %endfor
${hname | h}
${value | h}

%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:
    • ${err | h}
    % else:

     

    % endif
  • % endfor
%endif
% endif %endif