--- loncom/interface/lontrackstudent.pm 2004/12/22 22:54:59 1.11 +++ loncom/interface/lontrackstudent.pm 2005/04/07 06:56:23 1.15 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lontrackstudent.pm,v 1.11 2004/12/22 22:54:59 albertel Exp $ +# $Id: lontrackstudent.pm,v 1.15 2005/04/07 06:56:23 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -44,10 +44,10 @@ package Apache::lontrackstudent; use strict; use Apache::Constants qw(:common :http); -use Apache::lonnet(); +use Apache::lonmysql; +use Apache::lonnet; use Apache::lonlocal; use Time::HiRes; -use Time::Local; sub get_data { my ($r,$prog_state,$navmap,$mode) = @_; @@ -72,7 +72,7 @@ sub get_data { my $query = &build_query($mode); ## ## Send it along - my $home = $ENV{'course.'.$ENV{'request.course.id'}.'.home'}; + my $home = $env{'course.'.$env{'request.course.id'}.'.home'}; my $reply=&Apache::lonnet::metadata_query($query,undef,undef,[$home]); if (ref($reply) ne 'HASH') { $r->print('

'. @@ -112,17 +112,17 @@ sub get_data { } sub table_names { - my $cid = $ENV{'request.course.id'}; - my $domain = $ENV{'course.'.$cid.'.domain'}; - my $home = $ENV{'course.'.$cid.'.home'}; - my $course = $ENV{'course.'.$cid.'.num'}; + my $cid = $env{'request.course.id'}; + my $domain = $env{'course.'.$cid.'.domain'}; + my $home = $env{'course.'.$cid.'.home'}; + my $course = $env{'course.'.$cid.'.num'}; my $prefix = $course.'_'.$domain.'_'; # my %tables = - ( student => $prefix.'students', - res => $prefix.'resource', - machine => $prefix.'machine_table', - activity=> $prefix.'activity', + ( student =>&Apache::lonmysql::fix_table_name($prefix.'students'), + res =>&Apache::lonmysql::fix_table_name($prefix.'resource'), + machine =>&Apache::lonmysql::fix_table_name($prefix.'machine_table'), + activity=>&Apache::lonmysql::fix_table_name($prefix.'activity'), ); return %tables; } @@ -132,7 +132,7 @@ sub get_max_time_in_db { my %table = &table_names(); my $query = qq{SELECT MAX(time) FROM $table{'activity'} }; # - my $home = $ENV{'course.'.$ENV{'request.course.id'}.'.home'}; + my $home = $env{'course.'.$env{'request.course.id'}.'.home'}; my $reply=&Apache::lonnet::metadata_query($query,undef,undef,[$home]); if (ref($reply) ne 'HASH') { return undef; @@ -178,22 +178,15 @@ sub get_max_time_in_db { $timestr = &Apache::lonnet::unescape($line); } close(TIMEDATA); - my ($year,$month,$day,$hour,$min,$sec) = - ($timestr =~ /^(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/); - $month -= 1; # Good old timelocal - my $max_time = undef; - if (eval("&timelocal($sec,$min,$hour,$day,$month,$year)")) { - $max_time = &timelocal($sec,$min,$hour,$day,$month,$year); - } - return $max_time; + return &Apache::lonmysql::unsqltime($timestr); } sub build_query { my ($mode) = @_; - my $cid = $ENV{'request.course.id'}; - my $domain = $ENV{'course.'.$cid.'.domain'}; - my $home = $ENV{'course.'.$cid.'.home'}; - my $course = $ENV{'course.'.$cid.'.num'}; + my $cid = $env{'request.course.id'}; + my $domain = $env{'course.'.$cid.'.domain'}; + my $home = $env{'course.'.$cid.'.home'}; + my $course = $env{'course.'.$cid.'.num'}; my $prefix = $course.'_'.$domain.'_'; # my %table = &table_names(); @@ -232,6 +225,11 @@ sub output_results { my ($r,$results_file,$navmap,$mode) = @_; ## ## + if (! -s $results_file) { + # results file is empty, just let them know there is no data + $r->print('

'.&mt('No data was returned for your request').'

'); + return; + } if (! open(ACTIVITYDATA,$results_file)) { $r->print('

'.&mt('Unable to read results file.').'

'. '

'. @@ -396,10 +394,10 @@ sub display_values { ################################################################### sub request_data_update { my $command = 'prepare activity log'; - my $cid = $ENV{'request.course.id'}; - my $domain = $ENV{'course.'.$cid.'.domain'}; - my $home = $ENV{'course.'.$cid.'.home'}; - my $course = $ENV{'course.'.$cid.'.num'}; + my $cid = $env{'request.course.id'}; + my $domain = $env{'course.'.$cid.'.domain'}; + my $home = $env{'course.'.$cid.'.home'}; + my $course = $env{'course.'.$cid.'.num'}; # &Apache::lonnet::logthis($command.' '.$course.' '.$domain.' '.$home); my $result = &Apache::lonnet::metadata_query($command,$course,$domain, [$home]); @@ -465,18 +463,18 @@ sub handler { $loaderror= &Apache::lonnet::overloaderror ($r, - $ENV{'course.'.$ENV{'request.course.id'}.'.home'}); + $env{'course.'.$env{'request.course.id'}.'.home'}); if ($loaderror) { return $loaderror; } # # Check for access - if (! &Apache::lonnet::allowed('vsa',$ENV{'request.course.id'})) { - $ENV{'user.error.msg'}= + if (! &Apache::lonnet::allowed('vsa',$env{'request.course.id'})) { + $env{'user.error.msg'}= $r->uri.":vsa:0:0:Cannot student activity for complete course"; if (! &Apache::lonnet::allowed('vsa', - $ENV{'request.course.id'}.'/'. - $ENV{'request.course.sec'})) { - $ENV{'user.error.msg'}= + $env{'request.course.id'}.'/'. + $env{'request.course.sec'})) { + $env{'user.error.msg'}= $r->uri.":vsa:0:0:Cannot view student activity with given role"; return HTTP_NOT_ACCEPTABLE; } @@ -503,7 +501,8 @@ sub handler { bug=>'instructor interface'}); # # Give the LON-CAPA page header - $r->print(''.&styles.''. + my $html=&Apache::lonxml::xmlbegin(); + $r->print($html.'<head>'.&styles().'<title>'. &mt('Student Activity'). "\n". &Apache::loncommon::bodytag('Student Activity'). @@ -526,14 +525,11 @@ sub handler { ($r,\%prog_state,&mt('Contacting course home server')); # my $result = &request_data_update(); - if (ref($result) eq 'HASH') { - $result = join(' ',map { $_.'=>'.$result->{$_}; } keys(%$result)); - } # - if (exists($ENV{'form.selected_student'})) { + if (exists($env{'form.selected_student'})) { # For now, just show all the data, in the future allow selection of # a student - my ($sname,$sdom) = split(':',$ENV{'form.selected_student'}); + my ($sname,$sdom) = split(':',$env{'form.selected_student'}); if ($sname =~ /^\w*$/ && $sdom =~ /^\w*$/) { $r->print('

'. &mt('Recent activity of [_1]@[_2]',$sname,$sdom). @@ -543,7 +539,7 @@ Compiling student activity data can take It may be necessary to reload this page to get the most current information. END &get_data($r,\%prog_state,$navmap, - 'student:'.$ENV{'form.selected_student'}); + 'student:'.$env{'form.selected_student'}); } else { $r->print('

'.&mt('Unable to process for [_1]@[_2]', $sname,$sdom).'

');