[LON-CAPA-cvs] cvs: loncom / lond

raeburn lon-capa-cvs@mail.lon-capa.org
Sat, 01 Jan 2005 02:31:06 -0000


raeburn		Fri Dec 31 21:31:06 2004 EDT

  Modified files:              
    /loncom	lond 
  Log:
  Added documentation for courseidput and courseiddump functions that operate on a domain's nohist_courseids.db.  Backwards compatibility added for courseidput. In courseiddump replace regexp matches with more efficient split of incoming filter information.
  
  
Index: loncom/lond
diff -u loncom/lond:1.271 loncom/lond:1.272
--- loncom/lond:1.271	Thu Dec 30 20:24:14 2004
+++ loncom/lond	Fri Dec 31 21:31:05 2004
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # lond "LON Daemon" Server (port "LOND" 5663)
 #
-# $Id: lond,v 1.271 2004/12/31 01:24:14 raeburn Exp $
+# $Id: lond,v 1.272 2005/01/01 02:31:05 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -58,7 +58,7 @@
 my $status='';
 my $lastlog='';
 
-my $VERSION='$Revision: 1.271 $'; #' stupid emacs
+my $VERSION='$Revision: 1.272 $'; #' stupid emacs
 my $remoteVERSION;
 my $currenthostid="default";
 my $currentdomainid;
@@ -3108,6 +3108,14 @@
 #   $tail     - Tail of the command.  In this case consists of a colon
 #               separated list contaning the domain to apply this to and
 #               an ampersand separated list of keyword=value pairs.
+#               Each value is a colon separated list that includes:  
+#               description, institutional code and course owner.
+#               For backward compatibility with versions included
+#               in LON-CAPA 1.1.X (and earlier) and 1.2.X, institutional
+#               code and/or course owner are preserved from the existing 
+#               record when writing a new record in response to 1.1 or 
+#               1.2 implementations of lonnet::flushcourselogs().   
+#                      
 #   $client   - Socket open on the client.
 # Returns:
 #   1    - indicating that processing should continue
@@ -3131,6 +3139,21 @@
 	foreach my $pair (@pairs) {
             my ($key,$courseinfo) = split(/=/,$pair,2);
             $courseinfo =~ s/=/:/g;
+
+            my @current_items = split/:/,$hashref->{$key};
+            shift @current_items; # remove description
+            pop @current_items;   # remove last access
+            my $numcurrent = scalar(@current_items);
+
+            my @new_items = split/:/,$courseinfo;
+            my $numnew = scalar(@new_items);
+            if ($numcurrent > 0) {
+                if ($numnew == 1) { # flushcourselogs() from 1.1 or earlier
+                    $courseinfo .= ':'.join(':',@current_items);
+                } elsif ($numnew == 2) { # flushcourselogs() from 1.2.X
+                    $courseinfo .= ':'.$current_items[$numcurrent-1];
+                }
+            }
 	    $hashref->{$key}=$courseinfo.':'.$now;
 	}
 	if (untie(%$hashref)) {
@@ -3169,6 +3192,14 @@
 #                 description - regular expression that is used to filter
 #                            the dump.  Only keywords matching this regexp
 #                            will be used.
+#                 institutional code - optional supplied code to filter 
+#                            the dump. Only courses with an institutional code 
+#                            that match the supplied code will be returned.
+#                 owner    - optional supplied username of owner to filter
+#                            the dump.  Only courses for which the course 
+#                            owner matches the supplied username will be
+#                            returned. Implicit assumption that owner is a user
+#                            in the domain in which the course database is defined.        
 #     $client  - The socket open on the client.
 # Returns:
 #    1     - Continue processing.
@@ -3202,13 +3233,15 @@
     if ($hashref) {
 	while (my ($key,$value) = each(%$hashref)) {
 	    my ($descr,$lasttime,$inst_code,$owner);
-            if ($value =~  m/^([^\:]*):([^\:]*):([^\:]*):(\d+)$/) {
-                ($descr,$inst_code,$owner,$lasttime)=($1,$2,$3,$4);
-	    } elsif ($value =~ m/^([^\:]*):([^\:]*):(\d+)$/) {
-		($descr,$inst_code,$lasttime)=($1,$2,$3);
-	    } else {
-		($descr,$lasttime) = split(/\:/,$value);
-	    }
+            my @courseitems = split/:/,$value;
+            $descr = shift @courseitems;
+            $lasttime = pop @courseitems;
+            if (@courseitems > 0) {
+                $inst_code = shift @courseitems;
+            }
+            if (@courseitems > 0) {
+                $owner = shift @courseitems;
+            }
 	    if ($lasttime<$since) { next; }
             my $match = 1;
 	    unless ($description eq '.') {