';
$Str .= ''.
@@ -953,46 +645,55 @@ sub DisplayClasslist {
my @selected_sections = &get_selected_sections();
if (! @Students) {
if ($selected_sections[0] eq 'all') {
- if (lc($env{'form.Status'}) eq 'any') {
- $Str .= ''.
- &mt('There are no students in the course.').
- '';
- } elsif (lc($env{'form.Status'}) eq 'active') {
- $Str .= ''.
+ if (lc($env{'form.Status'}) eq 'active') {
+ $Str .= ''.
&mt('There are no currently enrolled students in the course.').
- '';
+ ' ';
} elsif (lc($env{'form.Status'}) eq 'expired') {
- $Str .= ''.
+ $Str .= ''.
&mt('There are no previously enrolled students in the course.').
- '';
+ ' ';
+ } elsif (lc($env{'form.Status'}) eq 'future') {
+ $Str .= ''.
+ &mt('There are no students with future access in the course.').
+ ' ';
+ } else { # 'any' and any others
+ $Str .= ''.
+ &mt('There are no students in the course.').
+ ' ';
}
} else {
- my $sections;
- if (lc($env{'form.Status'}) eq 'any') {
- $Str .= ''.
- &mt('There are no students in the selected sections.').
- '';
- } elsif (lc($env{'form.Status'}) eq 'active') {
- $Str .= ''.
+ if (lc($env{'form.Status'}) eq 'active') {
+ $Str .= ''.
&mt('There are no currently enrolled students in the selected sections.').
- '';
+ ' ';
} elsif (lc($env{'form.Status'}) eq 'expired') {
- $Str .= ''.
+ $Str .= ''.
&mt('There are no previously enrolled students in the selected sections.').
- '';
+ ' ';
+ } elsif (lc($env{'form.Status'}) eq 'future') {
+ $Str .= ''.
+ &mt('There are no students with future access in the selected sections.').
+ ' ';
+ } else { # 'any' and any others
+ $Str .= ''.
+ &mt('There are no students in the selected sections.').
+ ' ';
}
}
- $Str.= ''.
- &mt('Click here to return to the chart').'';
+ $Str.= ''
+ .''
+ .&mt('Return to the chart').''
+ .' ';
$r->print($Str);
$r->rflush();
return;
}
- # "Click" is asinine but it is probably not my place to change the world.
- $Str .= 'Click on a students name or username to view their chart';
- $Str .= ''."\n";
- $Str .= ''."\n";
+ $Str .= ''.&mt('Select One Student').''
+ .''.&mt("Click on a student's name or username to view their chart.").' '
+ .&Apache::loncommon::start_data_table()
+ .&Apache::loncommon::start_data_table_header_row();
foreach my $field (@Fields) {
$Str .= ''.&mt($field).
' | ';
}
- $Str .= ' '."\n";
+ $Str .= &Apache::loncommon::end_data_table_header_row();
#
- my $alternate = 0;
foreach my $student (@Students) { # @Students is a package variable
my $sname = $student->{'username'}.':'.$student->{'domain'};
- if($alternate) {
- $Str .= '';
- } else {
- $Str .= ' ';
- }
- $alternate = ($alternate + 1) % 2;
+ $Str .= &Apache::loncommon::start_data_table_row();
#
foreach my $field (@Fields) {
$Str .= '';
if ($field eq 'fullname' || $field eq 'username') {
$Str .= '';
- $Str .= $student->{$field}.' ';
+ $Str .= &escape($sname).'">';
+ $Str .= $student->{$field};
$Str .= '';
} elsif ($field eq 'status') {
$Str .= &mt($student->{$field});
} else {
- $Str .= $student->{$field};
+ if ($student->{$field} eq 'none') {
+ $Str .= &mt('none')
+ } else {
+ $Str .= $student->{$field};
+ }
}
$Str .= ' | ';
}
- $Str .= " \n";
+ $Str .= &Apache::loncommon::end_data_table_row();
}
- $Str .= '
| '."\n";
+ $Str .= &Apache::loncommon::end_data_table();
#
$r->print($Str);
$r->rflush();
@@ -1039,84 +738,65 @@ sub DisplayClasslist {
return;
}
-##############################################
-##############################################
+
+
sub CreateMainMenu {
#
# Define menu data
- my @reports = ({ internal_name => 'problem_statistics',
- name => &mt('Overall Problem Statistics'),
- short_description =>
- &mt('Student performance statistics on all problems.'),
- },
- { internal_name => 'problem_analysis',
- name => &mt('Detailed Problem Analysis'),
- short_description =>
- &mt('Detailed statistics and graphs of student performance on problems.'),
- },
- { internal_name => 'submissiontime_analysis',
- name => &mt('Submission Time Plots'),
- short_description =>
- &mt('Display and analysis of submission times on assessments.'),
- },
- { internal_name => 'student_submission_reports',
- name => &mt('Student Submission Reports'),
- short_description =>
- &mt('Prepare reports of student submissions.'),
- },
- { internal_name => 'survey_reports',
- name => &mt('Survey Reports'),
- short_description =>
- &mt('Prepare reports on survey results.'),
- },
- { internal_name => 'correct_problems_plot',
- name => &mt('Correct Problems Plot'),
- short_description =>
- &mt('Display a histogram of student performance in the course.'),
- },
-# { internal_name => 'grading_analysis',
-# name => &mt('Detailed Grading Analysis'),
-# short_description =>
-# &mt('Display statistics about who graded who.'),
-# },
-# { internal_name => 'student_assessment',
-# name => &mt('Problem Status Chart'),
-# short_description =>
-# &mt('Brief view of each students performance in course.'),
-# },
- # 'percentage' => 'Correct-problems Plot',
- # 'activitylog' => 'Activity Log',
- );
- #
- # Create the menu
- my $Str;
- $Str .= ''.&mt('Please select a report to generate').'';
- foreach my $reportdata (@reports) {
- $Str .=' \n";
- $Str .= ' '.(' 'x8).$reportdata->{'short_description'}.
- "\n";
- }
- $Str .="\n";
- #
- return $Str;
+ my @reports = (
+ {categorytitle => 'Statistics and Analyses',
+ items => [
+ {url => '/adm/statistics?reportSelected=problem_statistics',
+ permission => 'F',
+ icon => 'document-open.png',
+ linktext => ('Overall Problem Statistics'),
+ linktitle => ('Student performance statistics on all problems.')},
+
+ {url => '/adm/statistics?reportSelected=problem_analysis',
+ permission => 'F',
+ icon => 'prob_ana.png',
+ linktext => ('Detailed Problem Analysis'),
+ linktitle => ('Detailed statistics and graphs of student performance on problems.')},
+ ]},
+ {categorytitle => 'Plots',
+ items => [
+ {url => '/adm/statistics?reportSelected=submissiontime_analysis',
+ permission => 'F',
+ icon => 'subtimpl.png',
+ linktext => ('Submission Time Plots'),
+ linktitle => ('Display and analysis of submission times on assessments.')},
+
+ {url => '/adm/statistics?reportSelected=correct_problems_plot',
+ permission => 'F',
+ icon => 'coprplot.png',
+ linktext => ('Correct Problems Plot'),
+ linktitle => ('Display a histogram of student performance in the course.')},
+ ]},
+ {categorytitle => 'Reports',
+ items => [
+ {url => '/adm/statistics?reportSelected=student_submission_reports',
+ permission => 'F',
+ icon => 'edit-copy.png',
+ linktext => ('Student Submission Reports'),
+ linktitle => ('Prepare reports of student submissions.')},
+
+ {url => '/adm/statistics?reportSelected=survey_reports',
+ permission => 'F',
+ icon => 'survey_rep.png',
+ linktext => ('Survey Reports'),
+ linktitle => ('Prepare reports on survey results.')},
+ ]});
+
+return &Apache::lonhtmlcommon::generate_menu(@reports);
+
}
-##############################################
-##############################################
+
+
sub handler {
my $r=shift;
my $c = $r->connection();
#
- # Check for overloading
- my $loaderror=&Apache::lonnet::overloaderror($r);
- if ($loaderror) { return $loaderror; }
- $loaderror=
- &Apache::lonnet::overloaderror($r,
- $env{'course.'.$env{'request.course.id'}.'.home'});
- if ($loaderror) { return $loaderror; }
- #
# Check for access
if (! &Apache::lonnet::allowed('vgr',$env{'request.course.id'})) {
$env{'user.error.msg'}=
@@ -1163,22 +843,23 @@ ENDSTYLE
bug=>'Statistics and Charts'});
if (! exists($env{'form.reportSelected'}) ||
$env{'form.reportSelected'} eq '') {
- $r->print(&Apache::lonhtmlcommon::breadcrumbs
- (undef,&mt('Statistics Main Page')).
- &CreateMainMenu());
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Statistics Main Page'));
+ &Apache::lonquickgrades::startGradeScreen($r,'statistics');
+ $r->print(&CreateMainMenu());
} else {
#
if (! &Apache::lonmysql::verify_sql_connection()) {
my $serveradmin = $r->dir_config('lonAdmEMail');
- $r->print(''.
+ $r->print(''.
&mt('Unable to connect to database!').
- ' ');
- $r->print(''.
- &mt('Please notify the server administrator ').
- ''.$serveradmin.' ');
+ '');
+ $r->print(''
+ .&mt('Please notify the server administrator [_1]',
+ ,''.$serveradmin.'')
+ .' ');
$r->print(''.
&mt('Course Statistics and Charts cannot be '.
- 'retrieved until the database is restarted. '.
+ 'retrieved until the database is restarted. '.
'Your data is intact but cannot be displayed '.
'at this time.').' ');
$r->print(&Apache::loncommon::end_page());
@@ -1190,15 +871,17 @@ ENDSTYLE
&Apache::loncoursedata::delete_caches($env{'requres.course.id'});
}
#
+ my $GoToPage = $env{'form.reportSelected'};
+ #
# Begin form output
$r->print('\n");
}
+ &Apache::lonquickgrades::endGradeScreen($r);
$r->print(&Apache::loncommon::end_page());
$r->rflush();
#
@@ -1257,17 +941,227 @@ ENDSTYLE
1;
-#######################################################
-#######################################################
+__END__
=pod
+=head1 NAME
+
+lonstatistics
+
+=head1 SYNOPSIS
+
+Main handler for statistics and chart.
+
+This is part of the LearningOnline Network with CAPA project
+described at http://www.lon-capa.org.
+
+
+=head1 PACKAGE VARIABLES
+
+=over
+
+=item @FullClasslist The full classlist
+
+=item @Students The students we are concerned with for this invocation
+
+=item @Sections The sections available in this class
+
+=item @Groups The groups available in the class
+
+=item $curr_student The student currently being examined
+
+=item $prev_student The student previous in the classlist
+
+=item $next_student The student next in the classlist
+
=back
-=cut
+=head1 SUBROUTINES
-#######################################################
-#######################################################
+=over
-__END__
+=item &clear_classlist_variables()
+
+undef the following package variables:
+
+=over 4
+
+=item * @FullClasslist
+
+=item * @Students
+
+=item * @Sections
+
+=item * @Groups
+
+=item * %StudentData
+
+=item * @StudentDataOrder
+
+=item * @SelectedStudentData
+
+=item * $curr_student
+
+=item * $prev_student
+
+=item * $next_student
+
+=back
+
+=item &PrepareClasslist()
+
+Build up the classlist information. The classlist information is kept in
+the following package variables:
+
+=over 4
+
+=item * @FullClasslist
+
+=item * @Students
+
+=item * @Sections
+
+=item * @Groups
+
+=item * %StudentData
+
+=item * @SelectedStudentData
+
+=item * $curr_student
+
+=item * $prev_student
+
+=item * $next_student
+
+=back
+
+$curr_student, $prev_student, and $next_student may not be defined, depending
+upon the calling context.
+
+=item get_selected_sections()
+
+Returns an array of the selected sections
+
+=item get_selected_groups()
+
+Returns an array of the selected groups
+
+=item §ion_and_enrollment_description()
+
+Returns a string describing the currently selected section(s), group(s) and
+access status.
+
+Inputs: mode = 'plaintext' or 'localized' (defaults to 'localized')
+ 'plaintext' is used for example in Excel spreadsheets.
+Returns: scalar description string.
+
+=item section_or_group_text()
+
+=item get_students()
+
+Returns a list of the selected students
+
+=item ¤t_student()
+
+Returns a pointer to a hash containing data about the currently
+selected student.
+
+=item &previous_student()
+
+Returns a pointer to a hash containing data about the student prior
+in the list of students. Or something.
+
+=item &next_student()
+
+Returns a pointer to a hash containing data about the next student
+to be viewed.
+
+=item &StudentDataSelect($elementname,$status,$numvisible,$selected)
+
+Returns html for a selection box allowing the user to choose one (or more)
+of the fields of student data available (fullname, username, id, section, etc)
+
+=over 4
+
+=item * $elementname The name of the HTML form element
+
+=item * $status 'multiple' or 'single' selection box
+
+=item * $numvisible The number of options to be visible
+
+=back
+
+=item &get_selected_maps($elementname)
+
+Input: Name of the |