[LON-CAPA-cvs] cvs: loncom /interface lontrackstudent.pm

matthew lon-capa-cvs@mail.lon-capa.org
Wed, 25 Aug 2004 15:53:34 -0000


This is a MIME encoded message

--matthew1093449214
Content-Type: text/plain

matthew		Wed Aug 25 11:53:34 2004 EDT

  Modified files:              
    /loncom/interface	lontrackstudent.pm 
  Log:
  Big, huge changes.   Renamed and rewrote get_all_data to get_data, now have
  two modes of operation ('full_class' and 'student:'.$sname.':'.$sdom).
  Added &build_query to return the appropriate query based on the mode.
  Reworked output_results to respect the mode of operation and to provide a
  count of items.  Also, omit output of 'counter=<number>' values per Guy's
  request.
  Supports showing results for a single student, must be passed on command
  line as selected_student=$sname:$sdom.
  
  
--matthew1093449214
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20040825115334.txt"

Index: loncom/interface/lontrackstudent.pm
diff -u loncom/interface/lontrackstudent.pm:1.4 loncom/interface/lontrackstudent.pm:1.5
--- loncom/interface/lontrackstudent.pm:1.4	Mon Aug 23 11:03:15 2004
+++ loncom/interface/lontrackstudent.pm	Wed Aug 25 11:53:34 2004
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lontrackstudent.pm,v 1.4 2004/08/23 15:03:15 matthew Exp $
+# $Id: lontrackstudent.pm,v 1.5 2004/08/25 15:53:34 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -48,43 +48,18 @@
 use Apache::lonlocal;
 use Time::HiRes;
 
-###################################################################
-###################################################################
-sub get_all_data {
-    my ($r,$prog_state,$navmap) = @_;
+sub get_data {
+    my ($r,$prog_state,$navmap,$mode) = @_;
     ##
     ## Compose the query
     &Apache::lonhtmlcommon::Update_PrgWin
         ($r,$prog_state,&mt('Composing Query'));
     #
-    my $query;
-    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 $student_table  = $prefix.'students';
-    my $res_table      = $prefix.'resource';
-    my $action_table   = $prefix.'actions';
-    my $machine_table  = $prefix.'machine_table';
-    my $activity_table = $prefix.'activity';
-    #
-    $query = qq{
-        SELECT B.resource,A.time,C.student,D.action,E.machine,A.action_values 
-            FROM $activity_table AS A
-            LEFT JOIN $res_table      AS B ON B.res_id=A.res_id 
-            LEFT JOIN $student_table  AS C ON C.student_id=A.student_id 
-            LEFT JOIN $action_table   AS D ON D.action_id=A.action_id 
-            LEFT JOIN $machine_table  AS E ON E.machine_id=A.machine_id
-            WHERE A.student_id>10
-            ORDER BY A.time ASC
-            LIMIT 5000
-    };
-    $query =~ s|$/||g;
-    &Apache::lonnet::logthis($query);
+    my $query = &build_query($mode);
+    &Apache::lonnet::logthis('sending query '.$query);
     ##
     ## Send it along
+    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('<h2>'.
@@ -113,16 +88,66 @@
         $r->print(&mt('Please try again in a few minutes.'));
         return;
     }
+    $r->print('<h2>'.&mt('Elapsed Time = [_1] seconds',
+                         time-$starttime).'</h2>');
+    $r->rflush();
     &Apache::lonhtmlcommon::Update_PrgWin
         ($r,$prog_state,&mt('Parsing results'));
-    &output_results($r,$results_file,$navmap);
-    &Apache::lonhtmlcommon::Update_PrgWin
-        ($r,$prog_state,&mt('Finished!'));
+    $r->print('<h2>'.
+              &mt('Reloading this page may result in newer data').
+              '</h2>');
+    &output_results($r,$results_file,$navmap,$mode);
+    &Apache::lonhtmlcommon::Update_PrgWin($r,$prog_state,&mt('Finished!'));
     return;
 }
 
+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 $prefix = $course.'_'.$domain.'_';
+    #
+    my $student_table  = $prefix.'students';
+    my $res_table      = $prefix.'resource';
+    my $action_table   = $prefix.'actions';
+    my $machine_table  = $prefix.'machine_table';
+    my $activity_table = $prefix.'activity';
+    #
+    my $query;
+    if ($mode eq 'full_class') {
+        $query = qq{
+        SELECT B.resource,A.time,C.student,A.action,E.machine,A.action_values 
+            FROM $activity_table AS A
+            LEFT JOIN $res_table      AS B ON B.res_id=A.res_id 
+            LEFT JOIN $student_table  AS C ON C.student_id=A.student_id 
+            LEFT JOIN $machine_table  AS E ON E.machine_id=A.machine_id
+            WHERE A.student_id>10
+            ORDER BY A.time DESC
+            LIMIT 5000
+        };
+    } elsif ($mode =~ /^student:(.*):(.*)$/) {
+        my $student = $1.':'.$2;
+        $query = qq{
+        SELECT B.resource,A.time,A.action,E.machine,A.action_values 
+            FROM $activity_table AS A
+            LEFT JOIN $res_table      AS B ON B.res_id=A.res_id 
+            LEFT JOIN $student_table  AS C ON C.student_id=A.student_id 
+            LEFT JOIN $machine_table  AS E ON E.machine_id=A.machine_id
+            WHERE C.student='$student'
+            ORDER BY A.time DESC
+            LIMIT 5000
+        };
+    }
+    $query =~ s|$/||g;
+    return $query;
+}
+
+###################################################################
+###################################################################
 sub output_results {
-    my ($r,$results_file,$navmap) = @_;
+    my ($r,$results_file,$navmap,$mode) = @_;
     if (! open(ACTIVITYDATA,$results_file)) {
         $r->print('<h2>'.&mt('Unable to read results file.').'</h2>'.
                   '<p>'.
@@ -132,34 +157,50 @@
                   '</p>');
         return;
     }
-    my $tableheader = 
+    my $tableheader;
+    if ($mode eq 'full_class') { 
+        $tableheader = 
+            '<table><tr>'.
+            '<th>count</th>'.
+            '<th>'.&mt('Resource').'</th>'.
+            '<th>'.&mt('Time').'</th>'.
+            '<th>'.&mt('Student').'</th>'.
+            '<th>'.&mt('Action').'</th>'.
+            '<th>'.&mt('Originating Server').'</th>'.
+            '<th>'.&mt('Data').'</th>'.
+            '</tr>'.$/;
+    } elsif ($mode =~ /^student:/) {
         '<table><tr>'.
         '<th>'.&mt('Resource').'</th>'.
         '<th>'.&mt('Time').'</th>'.
-        '<th>'.&mt('Student').'</th>'.
         '<th>'.&mt('Action').'</th>'.
         '<th>'.&mt('Originating Server').'</th>'.
         '<th>'.&mt('Data').'</th>'.
         '</tr>'.$/;
-    my $count = 0;
-    $r->print($tableheader);
+    }
+    my $count = -1;
     $r->rflush();
     while (my $line = <ACTIVITYDATA>) {
         $line = &Apache::lonnet::unescape($line);
         if (++$count % 50 == 0) {
-            $r->print('</table>'.$/);
-            $r->rflush();
+            if ($count != 0) { 
+                $r->print('</table>'.$/);
+                $r->rflush();
+            }
             $r->print($tableheader);
         }
-        my ($symb,$timestamp,$student,$action,$machine,$values) =
-            map { &Apache::lonnet::unescape($_); } split(',',$line,6);
+        my ($symb,$timestamp,$student,$action,$machine,$values);
+        if ($mode eq 'full_class') {
+            ($symb,$timestamp,$student,$action,$machine,$values) =
+                map { &Apache::lonnet::unescape($_); } split(',',$line,6);
+        } else {
+            ($symb,$timestamp,$action,$machine,$values) =
+                map { &Apache::lonnet::unescape($_); } split(',',$line,5);
+        }
         my ($title,$src);
         if ($symb =~ m:^/adm/:) {
             $title = $symb;
             $src = $symb;
-        } elsif ($symb eq '/prtspool/') {
-            $title = "Printout";
-            $src = undef;
         } else {
             my $nav_res = $navmap->getBySymb($symb);
             if (defined($nav_res)) {
@@ -172,7 +213,7 @@
         }
         my $class = '';
         #
-        if ($symb eq '/printout/') {
+        if ($symb eq '/prtspool/') {
             $class = 'print';
             $title = 'retrieve printout';
         } elsif ($symb =~ m|^/adm/([^/]+)|) {
@@ -188,24 +229,34 @@
             $title = 'untitled';
             $class = 'warning';
         }
-        $r->print('<tr class="'.$class.'">'.
-                  '<td><a href="'.$src.'">'.$title.'</a>'.'</td>'.
-                  '<td><nobr>'.$timestamp.'</nobr></td>'.
-                  '<td>'.$student.'</td>'.
-                  '<td>'.$action.'</td>'.
-                  '<td>'.$machine.'</td>'.
-                  '<td>'.($class?$symb:'').'</td>'.'</tr>'.$/);
-#                  '<td>'.$symb.'</td>'.'</tr>'.$/);
+        if ($values =~ /^counter=\d+$/) {
+            $values = '';
+        }
+        if ($mode eq 'full_class') {
+            $r->print('<tr class="'.$class.'">'.
+                      '<td>'.$count.'</td>'.
+                      '<td><a href="'.$src.'">'.$title.'</a>'.'</td>'.
+                      '<td><nobr>'.$timestamp.'</nobr></td>'.
+                      '<td>'.$student.'</td>'.
+                      '<td>'.$action.'</td>'.
+                      '<td>'.$machine.'</td>'.
+                      '<td>'.$values.'</td>'.'</tr>'.$/);
+        } elsif ($mode =~ /^student:/) {
+            $r->print('<tr class="'.$class.'">'.
+                      '<td><a href="'.$src.'">'.$title.'</a>'.'</td>'.
+                      '<td><nobr>'.$timestamp.'</nobr></td>'.
+                      '<td>'.$action.'</td>'.
+                      '<td>'.$machine.'</td>'.
+                      '<td>'.$values.'</td>'.'</tr>'.$/);
+        }
     }
-    $r->print('</table>'.$/);
+    $r->print('</table>'.$/) if (! $count % 50);
     close(ACTIVITYDATA);
     return;
 }
 
-sub get_student_data {}
-sub html_output_student_data {}
-sub html_output_class_data {}
-
+###################################################################
+###################################################################
 sub request_data_update {
     my $command = 'prepare activity log';
     my $cid = $ENV{'request.course.id'};
@@ -220,10 +271,17 @@
 
 ###################################################################
 ###################################################################
+sub pick_student {
+    my ($r) = @_;
+    $r->print("Sorry, cannot display classlist at this time.  Come back another time.");
+    return;
+}
 
+###################################################################
+###################################################################
 sub styles {
     return <<END;
-<STYLE TYPE="text/css">
+<style type="text/css">
     tr.warning   { background-color: red; }
     tr.chat      { background-color: yellow; }
     tr.chatfetch { background-color: yellow; }
@@ -233,7 +291,7 @@
     tr.adm       { background-color: green; }
     tr.print     { background-color: blue; }
     tr.printout  { background-color: blue; }
-</STYLE>
+</style>
 END
 }
 
@@ -315,13 +373,18 @@
     }
     &Apache::lonnet::logthis('result from request_data_update: '.$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
-        &get_all_data($r,\%prog_state,$navmap);
+        my ($sname,$sdom) = split(':',$ENV{'form.selected_student'});
+        $r->print('<h2>'.
+                  &mt('Recent activity of [_1]@[_2]',$sname,$sdom).
+                  '</h2>');
+        &get_data($r,\%prog_state,$navmap,
+                  'student:'.$ENV{'form.selected_student'});
     } else {
         # For now, just show all the data instead of limiting it to one student
-        &get_all_data($r,\%prog_state,$navmap);
+        &get_data($r,\%prog_state,$navmap,'full_class');
     }
     #
     &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Done'));

--matthew1093449214--