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

matthew lon-capa-cvs@mail.lon-capa.org
Wed, 11 Aug 2004 23:37:36 -0000


This is a MIME encoded message

--matthew1092267456
Content-Type: text/plain

matthew		Wed Aug 11 19:37:36 2004 EDT

  Modified files:              
    /loncom/interface	lontrackstudent.pm 
  Log:
  &get_all_data is getting to be fleshed out.  Requests, receives, and
  displays activity log data in an ugly table.  Found bugs in navmaps so
  resource titles and links are not working.  Head to /adm/trackstudent to 
  see it in action (once most development servers have updated).
  
  
--matthew1092267456
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20040811193736.txt"

Index: loncom/interface/lontrackstudent.pm
diff -u loncom/interface/lontrackstudent.pm:1.1 loncom/interface/lontrackstudent.pm:1.2
--- loncom/interface/lontrackstudent.pm:1.1	Wed Aug 11 14:41:05 2004
+++ loncom/interface/lontrackstudent.pm	Wed Aug 11 19:37:36 2004
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lontrackstudent.pm,v 1.1 2004/08/11 18:41:05 matthew Exp $
+# $Id: lontrackstudent.pm,v 1.2 2004/08/11 23:37:36 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -50,7 +50,125 @@
 
 ###################################################################
 ###################################################################
-sub get_all_data {}
+sub get_all_data {
+    my ($r,$prog_state,$navmap) = @_;
+    ##
+    ## 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
+    };
+    $query =~ s|$/||g;
+    # &Apache::lonnet::logthis($query);
+    ##
+    ## Send it along
+    my $reply=&Apache::lonnet::metadata_query($query,undef,undef,[$home]);
+    if (ref($reply) ne 'HASH') {
+        $r->print('<h2>'.
+                  &mt('Error contacting home server for course: [_1]',
+                      $reply).
+                  '</h2>');
+        return;
+    }
+    my $results_file = $r->dir_config('lonDaemons').'/tmp/'.$reply->{$home};
+    my $endfile = $results_file.'.end';
+    ##
+    ## Check for the results
+    &Apache::lonhtmlcommon::Update_PrgWin
+        ($r,$prog_state,&mt('Waiting for results'));
+    my $maxtime = 500;
+    my $starttime = time;
+    while (! -e $endfile && (time-$starttime < $maxtime)) {
+        sleep(1);
+        &Apache::lonhtmlcommon::Update_PrgWin
+            ($r,$prog_state,&mt('Waiting for results'));
+    }
+    if (! -e $endfile) {
+        $r->print('<h2>'.
+                  &mt('Unable to retrieve data.').'</h2>');
+        $r->print(&mt('Please try again in a few minutes.'));
+        return;
+    }
+    &Apache::lonhtmlcommon::Update_PrgWin
+        ($r,$prog_state,&mt('Parsing results'));
+    if (! open(ACTIVITYDATA,$results_file)) {
+        $r->print('<h2>'.
+                  &mt('Unable to read results file.  This is a serious error and has been logged.  You should contact your system administrator to resolve this issue.  If you are the system administrator, I feel sorry for you.').
+                  '</h2>');
+        return;
+    }
+    my $tableheader = 
+        '<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);
+    $r->rflush();
+    while (my $line = <ACTIVITYDATA>) {
+        $line = &Apache::lonnet::unescape($line);
+        if (++$count % 50 == 0) {
+            $r->print('</table>'.$/);
+            $r->rflush();
+            $r->print($tableheader);
+        }
+        my ($symb,$timestamp,$student,$action,$machine,$values) =
+            map { &Apache::lonnet::unescape($_); } split(',',$line,6);
+        my ($title,$src);
+        if ($symb =~ m:^/(res|adm)/:) {
+            $title = $symb;
+            $src = $symb;
+        } else {
+            # We may need to add 'uploaded/' to the symb
+            # 
+            # Hey, guess what - navmaps->getBySymb 
+            # does not work with uploaded resources/new style courses/something
+            # The fact that our symbs do not have uploaded/ prepended to them
+            # then they (most often but not always) should, is likely to be
+            # a puzzle too.
+            #my $nav_res = $navmap->getBySymb($symb);
+            $title = 'resource title goes here'; # $nav_res->title();
+            $src   = '/dev/null'; # $nav_res->src();
+        }
+        $r->print('<tr>'.
+                  '<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>'.$/);
+    }
+    $r->print('</table>'.$/);
+    close(ACTIVITYDATA);
+    &Apache::lonhtmlcommon::Update_PrgWin
+        ($r,$prog_state,&mt('Finished!'));
+    return;
+}
+
 sub get_student_data {}
 sub html_output_student_data {}
 sub html_output_class_data {}
@@ -110,14 +228,9 @@
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['selected_student']);
     #
-    # Give the LON-CAPA page header
-    $r->print('<html><head><title>'.
-              &mt('Student Activity').
-              "</title></head>\n".
-              &Apache::loncommon::bodytag('Student Activity'));
-    $r->rflush();
+    # We will almost always need this...
+    my $navmap = Apache::lonnavmaps::navmap->new();
     # 
-    # Either print out a menu for them or send them to a report
     &Apache::lonhtmlcommon::clear_breadcrumbs();
     &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/studentactivity',
                                             title=>'Student Activity',
@@ -125,15 +238,32 @@
                                             faq=>139,
                                             bug=>'instructor interface'});
     #
+    # Give the LON-CAPA page header
+    $r->print('<html><head><title>'.
+              &mt('Student Activity').
+              "</title></head>\n".
+              &Apache::loncommon::bodytag('Student Activity').
+              &Apache::lonhtmlcommon::breadcrumbs(undef,'Student Activity'));
+    $r->rflush();
+    #
     # Begin form output
-    $r->print('<form name="Statistics" ');
-    $r->print('method="post" action="/adm/statistics">');
+    $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->print('<h1>'.&mt('View student activity').'</h1>');
+    my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
+        ($r,&mt('Student Activity Retrieval'),
+         &mt('Student Activity Retrieval'),undef,'inline',undef,
+         'trackstudent','status');
+    &Apache::lonhtmlcommon::Update_PrgWin
+        ($r,\%prog_state,&mt('Contacting course home server'));
     #
     my $result = &request_data_update();
     if (ref($result) eq 'HASH') {
-        $result = join(map { $_.'=>'.$result->{$_}; } keys(%$result));
+        $result = join(' ',map { $_.'=>'.$result->{$_}; } keys(%$result));
     }
     $r->print('<h2>'.$result.'</h2>');
     #
@@ -145,6 +275,12 @@
         $r->print('I would like to have something to show you but I do not.');
     }
     #
+    &get_all_data($r,\%prog_state,$navmap);
+
+#    &Apache::lonhtmlcommon::Update_PrgWin
+#        ($r,\%prog_state,&mt('Done'));
+
+    #
     $r->print("</form>\n");
     $r->print("</body>\n</html>\n");
     $r->rflush();

--matthew1092267456--