Diff for /loncom/interface/lontrackstudent.pm between versions 1.14 and 1.39

version 1.14, 2005/02/17 08:29:43 version 1.39, 2017/11/12 22:19:56
Line 45  package Apache::lontrackstudent; Line 45  package Apache::lontrackstudent;
 use strict;  use strict;
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
 use Apache::lonmysql;  use Apache::lonmysql;
 use Apache::lonnet();  use Apache::lonnet;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Time::HiRes;  use Time::HiRes;
   use DateTime();
   use lib '/home/httpd/lib/perl/';
   use LONCAPA;
   
   my $num_records=500;
   
 sub get_data {  sub get_data {
     my ($r,$prog_state,$navmap,$mode) = @_;      my ($r,$prog_state,$navmap,$mode) = @_;
Line 61  sub get_data { Line 66  sub get_data {
     #      #
     my $max_time = &get_max_time_in_db($r,$prog_state);      my $max_time = &get_max_time_in_db($r,$prog_state);
     if (defined($max_time)) {      if (defined($max_time)) {
         $r->print('<h3>'.&mt('Activity data goes to [_1]',          $r->print('<h3>'.&mt('Activity data compiled up to [_1]',
                              &Apache::lonlocal::locallocaltime($max_time)).                               &Apache::lonlocal::locallocaltime($max_time)).
                   '</h3>');                    '</h3>'.&mt('While data is processed, periodically reload this page for more recent activity').'<br />');
         $r->rflush();          $r->rflush();
     } else {      } else {
         $r->print('<h3>'.&mt('Unable to retrieve any data.  Please reload this page and try again.').'</h3>');          $r->print('<h3>'.&mt('Unable to retrieve any data.  Please reload this page and try again.').'</h3>');
Line 72  sub get_data { Line 77  sub get_data {
     my $query = &build_query($mode);      my $query = &build_query($mode);
     ##      ##
     ## Send it along      ## 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]);      my $reply=&Apache::lonnet::metadata_query($query,undef,undef,[$home]);
     if (ref($reply) ne 'HASH') {      if (ref($reply) ne 'HASH') {
         $r->print('<h2>'.          $r->print('<h2>'.
Line 106  sub get_data { Line 111  sub get_data {
     &Apache::lonhtmlcommon::Update_PrgWin      &Apache::lonhtmlcommon::Update_PrgWin
         ($r,$prog_state,&mt('Parsing results'));          ($r,$prog_state,&mt('Parsing results'));
     #      #
     &output_results($r,$results_file,$navmap,$mode);      my $last = &output_results($r,$results_file,$navmap,$mode);
       my ($sname,$sdom) = ($mode=~/^student:(.*):(.*)$/);
       
       my ($text,$inc);
       if ( $last > 0 && (($last+1) >= $env{'form.start'}+$num_records) ) {
    $text = 'View more activity by this student';
    $inc  = $num_records;
    $r->print(&Apache::loncommon::track_student_link($text,$sname,$sdom,undef,
    ($env{'form.start'}+$inc),
                                                            $env{'form.only_body'}
    ));
    $r->print('<br />');
       }
       $r->print('<hr />');
       $text = 'Resubmit last request to check for newer data';
       $r->print(&Apache::loncommon::track_student_link($text,$sname,$sdom,undef,
        $env{'form.start'},
                                                        $env{'form.only_body'}));
   
     &Apache::lonhtmlcommon::Update_PrgWin($r,$prog_state,&mt('Finished!'));      &Apache::lonhtmlcommon::Update_PrgWin($r,$prog_state,&mt('Finished!'));
     return;      return;
 }  }
   
 sub table_names {  sub table_names {
     my $cid = $ENV{'request.course.id'};      my $cid = $env{'request.course.id'};
     my $domain = $ENV{'course.'.$cid.'.domain'};      my $domain = $env{'course.'.$cid.'.domain'};
     my $home = $ENV{'course.'.$cid.'.home'};      my $home = $env{'course.'.$cid.'.home'};
     my $course = $ENV{'course.'.$cid.'.num'};      my $course = $env{'course.'.$cid.'.num'};
     my $prefix = $course.'_'.$domain.'_';      my $prefix = $course.'_'.$domain.'_';
     #      #
     my %tables =       my %tables = 
Line 132  sub get_max_time_in_db { Line 155  sub get_max_time_in_db {
     my %table = &table_names();      my %table = &table_names();
     my $query = qq{SELECT MAX(time) FROM $table{'activity'} };      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]);      my $reply=&Apache::lonnet::metadata_query($query,undef,undef,[$home]);
     if (ref($reply) ne 'HASH') {      if (ref($reply) ne 'HASH') {
         return undef;          return undef;
Line 163  sub get_max_time_in_db { Line 186  sub get_max_time_in_db {
         ($r,$prog_state,&mt('Parsing results'));          ($r,$prog_state,&mt('Parsing results'));
     #      #
     if (! open(TIMEDATA,$results_file)) {      if (! open(TIMEDATA,$results_file)) {
         $r->print('<h2>'.&mt('Unable to read results file.').'</h2>'.          $r->print('<p class="LC_error">'.&mt('Unable to read results file.').'</p>'.
                   '<p>'.                    '<p>'.
                   &mt('This is a serious error and has been logged.  '.                    &mt('This is a serious error and has been logged.').
                       'You should contact your system administrator '.                    '<br />'.
                       'to resolve this issue.').                    &mt('Please alert your LON-CAPA administrator.').
                   '</p>');                    '</p>');
         return;          return;
     }      }
Line 175  sub get_max_time_in_db { Line 198  sub get_max_time_in_db {
     my $timestr = '';      my $timestr = '';
     while (my $line = <TIMEDATA>) {      while (my $line = <TIMEDATA>) {
         chomp($line);          chomp($line);
         $timestr = &Apache::lonnet::unescape($line);          $timestr = &unescape($line);
     }      }
     close(TIMEDATA);      close(TIMEDATA);
     return &Apache::lonmysql::unsqltime($timestr);      return &Apache::lonmysql::unsqltime($timestr);
Line 183  sub get_max_time_in_db { Line 206  sub get_max_time_in_db {
   
 sub build_query {  sub build_query {
     my ($mode) = @_;      my ($mode) = @_;
     my $cid = $ENV{'request.course.id'};      my $cid = $env{'request.course.id'};
     my $domain = $ENV{'course.'.$cid.'.domain'};      my $domain = $env{'course.'.$cid.'.domain'};
     my $home = $ENV{'course.'.$cid.'.home'};      my $home = $env{'course.'.$cid.'.home'};
     my $course = $ENV{'course.'.$cid.'.num'};      my $course = $env{'course.'.$cid.'.num'};
     my $prefix = $course.'_'.$domain.'_';      my $prefix = $course.'_'.$domain.'_';
       my $start = ($env{'form.start'}+0);
     #      #
     my %table = &table_names();      my %table = &table_names();
     #      #
Line 200  sub build_query { Line 224  sub build_query {
             LEFT JOIN $table{'student'}  AS C ON C.student_id=A.student_id               LEFT JOIN $table{'student'}  AS C ON C.student_id=A.student_id 
             LEFT JOIN $table{'machine'}  AS E ON E.machine_id=A.machine_id              LEFT JOIN $table{'machine'}  AS E ON E.machine_id=A.machine_id
             ORDER BY A.time DESC              ORDER BY A.time DESC
             LIMIT 500              LIMIT $start, $num_records
         };          };
     } elsif ($mode =~ /^student:(.*):(.*)$/) {      } elsif ($mode =~ /^student:(.*):(.*)$/) {
         my $student = $1.':'.$2;          my $student = $1.':'.$2;
Line 212  sub build_query { Line 236  sub build_query {
                 LEFT JOIN $table{'machine'}  AS E ON E.machine_id=A.machine_id                  LEFT JOIN $table{'machine'}  AS E ON E.machine_id=A.machine_id
                 WHERE C.student='$student'                  WHERE C.student='$student'
                 ORDER BY A.time DESC                  ORDER BY A.time DESC
                 LIMIT 500                  LIMIT $start, $num_records
             };              };
     }      }
     $query =~ s|$/||g;      $query =~ s|$/||g;
Line 227  sub output_results { Line 251  sub output_results {
     ##      ##
     if (! -s $results_file) {      if (! -s $results_file) {
         # results file is empty, just let them know there is no data          # results file is empty, just let them know there is no data
         $r->print('<h2>'.&mt('No data was returned for your request').'</h2>');          $r->print('<p class="LC_info">'.&mt('So far, no data has been returned for your request').'</p>');
         return;          return -1;
     }      }
     if (! open(ACTIVITYDATA,$results_file)) {      if (! open(ACTIVITYDATA,$results_file)) {
         $r->print('<h2>'.&mt('Unable to read results file.').'</h2>'.          $r->print('<p class="LC_error">'.&mt('Unable to read results file.').'</p>'.
                   '<p>'.                    '<p>'.
                   &mt('This is a serious error and has been logged.  '.                    &mt('This is a serious error and has been logged.').
                       'You should contact your system administrator '.                    '<br />'.
                       'to resolve this issue.').                    &mt('Please alert your LON-CAPA administrator.').
                   '</p>');                    '</p>');
         return;          return -2;
     }      }
     ##      ##
     ##      ##
Line 245  sub output_results { Line 269  sub output_results {
     if ($mode eq 'full_class') {       if ($mode eq 'full_class') { 
         $tableheader =           $tableheader = 
             '<table><tr>'.              '<table><tr>'.
               '<th>&nbsp;</th>'.
             '<th>'.&mt('Resource').'</th>'.              '<th>'.&mt('Resource').'</th>'.
             '<th>'.&mt('Time').'</th>'.              '<th>'.&mt('Time').'</th>'.
             '<th>'.&mt('Student').'</th>'.              '<th>'.&mt('Student').'</th>'.
Line 255  sub output_results { Line 280  sub output_results {
     } elsif ($mode =~ /^student:(.*):(.*)$/) {      } elsif ($mode =~ /^student:(.*):(.*)$/) {
         $tableheader =           $tableheader = 
             '<table><tr>'.              '<table><tr>'.
               '<th>&nbsp;</th>'.
             '<th>'.&mt('Resource').'</th>'.              '<th>'.&mt('Resource').'</th>'.
             '<th>'.&mt('Time').'</th>'.              '<th>'.&mt('Time').'</th>'.
             '<th>'.&mt('Action').'</th>'.              '<th>'.&mt('Action').'</th>'.
Line 262  sub output_results { Line 288  sub output_results {
             '<th align="left">'.&mt('Data').'</th>'.              '<th align="left">'.&mt('Data').'</th>'.
             '</tr>'.$/;              '</tr>'.$/;
     }      }
     my $count = -1;      my $count = $env{'form.start'}-1;
     $r->rflush();      $r->rflush();
     ##      ##
     ##      ##
   
       my $cid = $env{'request.course.id'};
       my $cnum = $env{'course.'.$cid.'.num'};
       my $cdom = $env{'course.'.$cid.'.domain'};   
       my $server_timezone = &Apache::lonnet::get_server_timezone($cnum,$cdom);
       if ($server_timezone ne '') {
           if (&Apache::lonlocal::gettimezone($server_timezone) eq 'local') {
               $server_timezone = '';
           }
       }
   
     while (my $line = <ACTIVITYDATA>) {      while (my $line = <ACTIVITYDATA>) {
         # FIXME: does not pass symbs along :(          # FIXME: does not pass symbs along :(
         chomp($line);          chomp($line);
         $line = &Apache::lonnet::unescape($line);          $line = &unescape($line);
         if (++$count % 50 == 0) {          if (++$count % 50 == 0) {
             if ($count != 0) {               if ($count != 0) { 
                 $r->print('</table>'.$/);                  $r->print('</table>'.$/);
Line 284  sub output_results { Line 321  sub output_results {
             ($symb,$timestamp,$action,$machine,$values) = split(',',$line,5);              ($symb,$timestamp,$action,$machine,$values) = split(',',$line,5);
         }          }
  foreach ($symb,$timestamp,$student,$action,$machine) {   foreach ($symb,$timestamp,$student,$action,$machine) {
     $_=&Apache::lonnet::unescape($_);      $_=&unescape($_);
  }   }
         my ($title,$src);          my ($title,$src);
         if ($symb =~ m:^/adm/:) {          if ($symb =~ m:^/adm/:) {
Line 296  sub output_results { Line 333  sub output_results {
                 $title = $nav_res->compTitle();                  $title = $nav_res->compTitle();
                 $src   = $nav_res->src();                  $src   = $nav_res->src();
             } else {              } else {
                 if ($src =~ m|^/res|) {   $src = $symb;
                     $title = $src;   if ($src !~ m{/adm}) {
                 } elsif ($values =~ /^\s*$/ &&       $title = &Apache::lonnet::gettitle($src);
                          (! defined($src) || $src =~ /^\s*$/)) {   } elsif ($values =~ /^\s*$/ && 
       (! defined($src) || $src =~ /^\s*$/)) {
                     next;                      next;
                 } elsif ($values =~ /^\s*$/) {                  } elsif ($values =~ /^\s*$/) {
                     $values = $src;                      $values = $src;
Line 336  sub output_results { Line 374  sub output_results {
  $values = &display_values($action,$values);   $values = &display_values($action,$values);
         #          #
         # Build the row for output          # Build the row for output
         my $tablerow = qq{<tr class="$class">};          my $tablerow = qq{<tr class="$class"><td>}.($count+1).qq{</td>};
         if ($src =~ m|^/adm/|) {          if ($src =~ m|^/adm/|) {
             $tablerow .=               $tablerow .= 
                 '<td valign="top"><nobr>'.$title.'</nobr></td>';                  '<td valign="top"><span class="LC_nobreak">'.$title.'</span></td>';
         } else {          } else {
             $tablerow .=               $tablerow .= 
                 '<td valign="top"><nobr>'.                  '<td valign="top"><span class="LC_nobreak">'.
                 '<a href="'.$src.'">'.$title.'</a>'.                  '<a href="'.$src.'">'.$title.'</a>'.
                 '</nobr></td>';                  '</span></td>';
           }
           if ($server_timezone ne '') {
               $timestamp = &convert_timezone($server_timezone,$timestamp);
         }          }
         $tablerow .= '<td valign="top"><nobr>'.$timestamp.'</nobr></td>';          $tablerow .= '<td valign="top"><span class="LC_nobreak">'.$timestamp.'</span></td>';
         if ($mode eq 'full_class') {          if ($mode eq 'full_class') {
             $tablerow.='<td valign="top">'.$student.'</td>';              $tablerow.='<td valign="top">'.$student.'</td>';
         }          }
Line 357  sub output_results { Line 398  sub output_results {
             '</tr>';              '</tr>';
         $r->print($tablerow.$/);          $r->print($tablerow.$/);
     }      }
     $r->print('</table>'.$/) if (! $count % 50);      $r->print('</table>'.$/);### if (! $count % 50);
     close(ACTIVITYDATA);      close(ACTIVITYDATA);
     return;      return $count;
   }
   
   sub convert_timezone {
       my ($server_timezone,$timestamp) = @_;
       if ($server_timezone && $timestamp) {
           my ($date,$time) = split(/\s+/,$timestamp);
           my ($year,$month,$day) = split(/\-/,$date);
           my ($hour,$minute,$sec) = split(/:/,$time);
           foreach ($month,$day,$hour,$minute,$sec) {
               return $timestamp if $_ eq '';
               $_ =~ s/^0//;
           }
           my $dt = DateTime->new(year      => $year,
                                  month     => $month,
                                  day       => $day,
                                  hour      => $hour,
                                  minute    => $minute,
                                  second    => $sec,
                                  time_zone => $server_timezone,
                                 );
           my $unixtime = $dt->epoch;
           $timestamp = &Apache::lonlocal::locallocaltime($unixtime);
       }
       return $timestamp;
 }  }
   
 ###################################################################  ###################################################################
Line 367  sub output_results { Line 432  sub output_results {
 sub display_values {  sub display_values {
     my ($action,$values)=@_;      my ($action,$values)=@_;
     my $result='<table>';      my $result='<table>';
     if ($action eq 'CSTORE') {      if (($action eq 'CSTORE') || ($action eq 'PUTSTORE')) {
           my $is_anon;
  my %values=map {split('=',$_,-1)} split(/\&/,$values);   my %values=map {split('=',$_,-1)} split(/\&/,$values);
  foreach my $key (sort(keys(%values))) {   foreach my $key (sort(keys(%values))) {
               my $unesc_key = &unescape($key);
               if ($values{$key} eq 'anonsurvey' || $values{$key} eq 'anonsurveycred') {
                   if ($unesc_key =~ /^resource\..+\.type$/) {
                       $is_anon = 1;
                       last;
                   }
               }
     $result.='<tr><td align="right">'.      $result.='<tr><td align="right">'.
  &Apache::lonnet::unescape($key).   $unesc_key.
  '</td><td>=</td><td align="left">'.   '</td><td>=</td><td align="left">'.
  &Apache::lonnet::unescape($values{$key}).'</td></tr>';   &unescape($values{$key}).'</td></tr>';
  }   }
  $result.='</table>';   $result.='</table>';
           if ($is_anon) {
               $result = '<span class="LC_warning">'.&mt('Anonymous Survey Submission: details not shown').'</span>';
           }
     } elsif ($action eq 'POST') {      } elsif ($action eq 'POST') {
  my %values=   my %values;
     map {split('=',&Apache::lonnet::unescape($_),-1)} split(/\&/,$values);          foreach my $pair (split(/\&/,$values)) {
               my ($key,$value) = split('=',&unescape($pair),-1);
               $values{$key} = $value;
           }
  foreach my $key (sort(keys(%values))) {   foreach my $key (sort(keys(%values))) {
     if ($key eq 'counter') { next; }      if ($key eq 'counter') { next; }
     $result.='<tr><td align="right">'.$key.'</td>'.      $result.='<tr><td align="right">'.$key.'</td>'.
Line 386  sub display_values { Line 465  sub display_values {
  }   }
  $result.='</table>';   $result.='</table>';
     } else {      } else {
  $result=&Apache::lonnet::unescape($values)   $result=&unescape($values)
     }      }
     return $result;      return $result;
 }  }
Line 394  sub display_values { Line 473  sub display_values {
 ###################################################################  ###################################################################
 sub request_data_update {  sub request_data_update {
     my $command = 'prepare activity log';      my $command = 'prepare activity log';
     my $cid = $ENV{'request.course.id'};      my $cid = $env{'request.course.id'};
     my $domain = $ENV{'course.'.$cid.'.domain'};      my $domain = $env{'course.'.$cid.'.domain'};
     my $home = $ENV{'course.'.$cid.'.home'};      my $home = $env{'course.'.$cid.'.home'};
     my $course = $ENV{'course.'.$cid.'.num'};      my $course = $env{'course.'.$cid.'.num'};
 #    &Apache::lonnet::logthis($command.' '.$course.' '.$domain.' '.$home);  #    &Apache::lonnet::logthis($command.' '.$course.' '.$domain.' '.$home);
     my $result = &Apache::lonnet::metadata_query($command,$course,$domain,      my $result = &Apache::lonnet::metadata_query($command,$course,$domain,
                                                  [$home]);                                                   [$home]);
Line 457  sub handler { Line 536  sub handler {
     my $r=shift;      my $r=shift;
     my $c = $r->connection();      my $c = $r->connection();
     #      #
     # Check for overloading here and on the course home server  
     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      # Check for access
     if (! &Apache::lonnet::allowed('vsa',$ENV{'request.course.id'})) {      if (! &Apache::lonnet::allowed('vsa',$env{'request.course.id'})) {
         $ENV{'user.error.msg'}=          $env{'user.error.msg'}=
             $r->uri.":vsa:0:0:Cannot student activity for complete course";              $r->uri.":vsa:0:0:Cannot student activity for complete course";
         if (!           if (! 
             &Apache::lonnet::allowed('vsa',              &Apache::lonnet::allowed('vsa',
                                      $ENV{'request.course.id'}.'/'.                                       $env{'request.course.id'}.'/'.
                                      $ENV{'request.course.sec'})) {                                       $env{'request.course.sec'})) {
             $ENV{'user.error.msg'}=              $env{'user.error.msg'}=
                 $r->uri.":vsa:0:0:Cannot view student activity with given role";                  $r->uri.":vsa:0:0:Cannot view student activity with given role";
             return HTTP_NOT_ACCEPTABLE;              return HTTP_NOT_ACCEPTABLE;
         }          }
Line 488  sub handler { Line 558  sub handler {
     #      #
     # Extract form elements from query string      # Extract form elements from query string
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['selected_student']);                        ['selected_student','start','only_body']);
     #      #
     # We will almost always need this...      # We will almost always need this...
     my $navmap = Apache::lonnavmaps::navmap->new();      my $navmap = Apache::lonnavmaps::navmap->new();
       if (!defined($navmap)) {
           my $requrl = $r->uri;
           $env{'user.error.msg'} = "$requrl:bre:0:0:Navmap initialization failed.";
           return HTTP_NOT_ACCEPTABLE;
       }
     #       # 
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/studentactivity',      &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/studentactivity',
                                             title=>'Student Activity',                                              title=>'Student Activity',
                                             text =>'Student Activity',                                              text =>'Student Activity',
                                             faq=>139,                                              faq=>139,
                                             bug=>'instructor interface'});                                              bug=>'instructor interface',
                                               help=>'View_recent_activity'});
     #      #
     # Give the LON-CAPA page header      # Give the LON-CAPA page header
     my $html=&Apache::lonxml::xmlbegin();      my $args;
     $r->print($html.'<head>'.&styles().'<title>'.      if ($env{'form.only_body'}) {
               &mt('Student Activity').          $args = { only_body => 1, };
               "</title></head>\n".          $args->{'add_progressbar'} = 1;
               &Apache::loncommon::bodytag('Student Activity').      }
               &Apache::lonhtmlcommon::breadcrumbs(undef,'Student Activity'));      $r->print(&Apache::loncommon::start_page('Student Activity',&styles(),$args).
                 &Apache::lonhtmlcommon::breadcrumbs('Student Activity'));
     $r->rflush();      $r->rflush();
     #      #
     # Begin form output      # Begin form output
     $r->print('<form name="trackstudent" method="post" action="/adm/trackstudent">');      $r->print('<form name="trackstudent" method="post" action="/adm/trackstudent">');
     $r->print('<br />');  
     $r->print('<div name="statusline">'.  
               &mt('Status:[_1]',  
                   '<input type="text" name="status" size="60" value="" />').  
               '</div>');  
     $r->rflush();      $r->rflush();
     my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin      my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r);
         ($r,&mt('Student Activity Retrieval'),  
          &mt('Student Activity Retrieval'),undef,'inline',undef,  
          'trackstudent','status');  
     &Apache::lonhtmlcommon::Update_PrgWin      &Apache::lonhtmlcommon::Update_PrgWin
         ($r,\%prog_state,&mt('Contacting course home server'));          ($r,\%prog_state,&mt('Contacting course home server'));
     #      #
     my $result = &request_data_update();      my $result = &request_data_update();
     #      #
     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          # For now, just show all the data, in the future allow selection of
         # a student          # a student
         my ($sname,$sdom) = split(':',$ENV{'form.selected_student'});          my ($sname,$sdom) = split(':',$env{'form.selected_student'});
         if ($sname =~ /^\w*$/ && $sdom =~ /^\w*$/) {          if ($sname =~ /^$LONCAPA::username_re$/ 
       && $sdom =~ /^$LONCAPA::domain_re$/) {
             $r->print('<h2>'.              $r->print('<h2>'.
                       &mt('Recent activity of [_1]@[_2]',$sname,$sdom).                        &mt('Recent activity of [_1]',$sname.':'.$sdom).
                       '</h2>');                        '</h2>');
             $r->print('<p>'.&mt(<<END).'</p>');              $r->print('<p class="LC_info">'
 Compiling student activity data can take a long time.                       .&mt('Compiling student activity data can take a long time.'
 It may be necessary to reload this page to get the most current information.                           .' Your request continues to be processed while results are displayed.')
 END                       .'</p>'
               );
             &get_data($r,\%prog_state,$navmap,              &get_data($r,\%prog_state,$navmap,
                       'student:'.$ENV{'form.selected_student'});                        'student:'.$env{'form.selected_student'});
         } else {          } else {
             $r->print('<h2>'.&mt('Unable to process for [_1]@[_2]',              $r->print(
                                  $sname,$sdom).'</h2>');                  '<p class="LC_error">'
                  .&mt('Unable to process for [_1]:[_2]',$sname,$sdom)
                  .'</p>'
               );
         }          }
     } else {      } else {
         # For now, just show all the data instead of limiting it to one student          # For now, just show all the data instead of limiting it to one student
Line 553  END Line 627  END
     &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);      &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
     #      #
     $r->print("</form>\n");      $r->print("</form>\n");
     $r->print("</body>\n</html>\n");      $r->print(&Apache::loncommon::end_page());
     $r->rflush();      $r->rflush();
     #      #
     return OK;      return OK;

Removed from v.1.14  
changed lines
  Added in v.1.39


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.