--- loncom/interface/lontrackstudent.pm 2009/01/02 23:07:55 1.26 +++ loncom/interface/lontrackstudent.pm 2024/11/21 07:26:03 1.41 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lontrackstudent.pm,v 1.26 2009/01/02 23:07:55 raeburn Exp $ +# $Id: lontrackstudent.pm,v 1.41 2024/11/21 07:26:03 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -46,6 +46,7 @@ use strict; use Apache::Constants qw(:common :http); use Apache::lonmysql; use Apache::lonnet; +use Apache::loncommon; use Apache::lonlocal; use Time::HiRes; use DateTime(); @@ -119,13 +120,16 @@ sub get_data { $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.start'}+$inc), + $env{'form.only_body'} )); $r->print('
'); } + $r->print('
'); $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.start'}, + $env{'form.only_body'})); &Apache::lonhtmlcommon::Update_PrgWin($r,$prog_state,&mt('Finished!')); return; @@ -182,12 +186,12 @@ sub get_max_time_in_db { &Apache::lonhtmlcommon::Update_PrgWin ($r,$prog_state,&mt('Parsing results')); # - if (! open(TIMEDATA,$results_file)) { - $r->print('

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

'. + if (! open(TIMEDATA,"<",$results_file)) { + $r->print('

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

'. '

'. - &mt('This is a serious error and has been logged. '. - 'You should contact your system administrator '. - 'to resolve this issue.'). + &mt('This is a serious error and has been logged.'). + '
'. + &mt('Please alert your LON-CAPA administrator.'). '

'); return; } @@ -248,15 +252,15 @@ sub output_results { ## if (! -s $results_file) { # results file is empty, just let them know there is no data - $r->print('

'.&mt('So far, no data has been returned for your request').'

'); + $r->print('

'.&mt('So far, no data has been returned for your request').'

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

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

'. + if (! open(ACTIVITYDATA,"<",$results_file)) { + $r->print('

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

'. '

'. - &mt('This is a serious error and has been logged. '. - 'You should contact your system administrator '. - 'to resolve this issue.'). + &mt('This is a serious error and has been logged.'). + '
'. + &mt('Please alert your LON-CAPA administrator.'). '

'); return -2; } @@ -321,6 +325,9 @@ sub output_results { $_=&unescape($_); } my ($title,$src); + if ($symb =~ m{^\Q/tiny/$cdom/\E\w+$}) { + $symb = &Apache::loncommon::symb_from_tinyurl($symb,$cnum,$cdom); + } if ($symb =~ m:^/adm/:) { $title = $symb; $src = $symb; @@ -343,6 +350,9 @@ sub output_results { $src = '/dev/null'; } } + if ($src =~ /.sequence$/) { + $src .= '?navmap=1'; + } } my %classes; my $class_count=0; @@ -429,15 +439,26 @@ sub convert_timezone { sub display_values { my ($action,$values)=@_; my $result=''; - if ($action eq 'CSTORE') { + if (($action eq 'CSTORE') || ($action eq 'PUTSTORE') || ($action eq 'EXPORT')) { + my $is_anon; my %values=map {split('=',$_,-1)} split(/\&/,$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.=''; } $result.='
'. - &unescape($key). + $unesc_key. '='. &unescape($values{$key}).'
'; + if ($is_anon) { + $result = ''.&mt('Anonymous Survey Submission: details not shown').''; + } } elsif ($action eq 'POST') { my %values; foreach my $pair (split(/\&/,$values)) { @@ -522,15 +543,6 @@ sub handler { my $r=shift; 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 if (! &Apache::lonnet::allowed('vsa',$env{'request.course.id'})) { $env{'user.error.msg'}= @@ -553,7 +565,7 @@ sub handler { # # Extract form elements from query string &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['selected_student','start']); + ['selected_student','start','only_body']); # # We will almost always need this... my $navmap = Apache::lonnavmaps::navmap->new(); @@ -568,25 +580,23 @@ sub handler { title=>'Student Activity', text =>'Student Activity', faq=>139, - bug=>'instructor interface'}); + bug=>'instructor interface', + help=>'View_recent_activity'}); # # Give the LON-CAPA page header - $r->print(&Apache::loncommon::start_page('Student Activity',&styles()). + my $args; + if ($env{'form.only_body'}) { + $args = { only_body => 1, }; + $args->{'add_progressbar'} = 1; + } + $r->print(&Apache::loncommon::start_page('Student Activity',&styles(),$args). &Apache::lonhtmlcommon::breadcrumbs('Student Activity')); $r->rflush(); # # Begin form output $r->print('
'); - $r->print('
'); - $r->print('
'. - &mt('Status:[_1]', - ''). - '
'); $r->rflush(); - my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin - ($r,&mt('Student Activity Retrieval'), - &mt('Student Activity Retrieval'),undef,'inline',undef, - 'trackstudent','status'); + my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r); &Apache::lonhtmlcommon::Update_PrgWin ($r,\%prog_state,&mt('Contacting course home server')); # @@ -599,17 +609,21 @@ sub handler { if ($sname =~ /^$LONCAPA::username_re$/ && $sdom =~ /^$LONCAPA::domain_re$/) { $r->print('

'. - &mt('Recent activity of [_1]:[_2]',$sname,$sdom). + &mt('Recent activity of [_1]',$sname.':'.$sdom). '

'); - $r->print('

'.&mt(<'); -Compiling student activity data can take a long time. -Your request continues to be processed while results are displayed. -END + $r->print('

' + .&mt('Compiling student activity data can take a long time.' + .' Your request continues to be processed while results are displayed.') + .'

' + ); &get_data($r,\%prog_state,$navmap, 'student:'.$env{'form.selected_student'}); } else { - $r->print('

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

'); + $r->print( + '

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

' + ); } } else { # For now, just show all the data instead of limiting it to one student