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

raeburn raeburn at source.lon-capa.org
Tue Apr 10 21:07:18 EDT 2012


raeburn		Wed Apr 11 01:07:18 2012 EDT

  Modified files:              
    /loncom	lond 
  Log:
  - Add documentation for code in &dump_with_regexp() and for routines
    used by it, that suppress display of course roles requiring LON-CAPA 2.10
    or newer, for user sessions hosted on servers running 2.9 or earlier.
  
  
Index: loncom/lond
diff -u loncom/lond:1.487 loncom/lond:1.488
--- loncom/lond:1.487	Mon Mar 26 11:03:34 2012
+++ loncom/lond	Wed Apr 11 01:07:18 2012
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # lond "LON Daemon" Server (port "LOND" 5663)
 #
-# $Id: lond,v 1.487 2012/03/26 11:03:34 foxr Exp $
+# $Id: lond,v 1.488 2012/04/11 01:07:18 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -60,7 +60,7 @@
 my $status='';
 my $lastlog='';
 
-my $VERSION='$Revision: 1.487 $'; #' stupid emacs
+my $VERSION='$Revision: 1.488 $'; #' stupid emacs
 my $remoteVERSION;
 my $currenthostid="default";
 my $currentdomainid;
@@ -3245,6 +3245,12 @@
 #                                             that is matched against
 #                                             database keywords to do
 #                                             selective dumps.
+#                               range       - optional range of entries
+#                                             e.g., 10-20 would return the
+#                                             10th to 19th items, etc.  
+#                               extra       - optional ref to hash of
+#                                             additional args. currently
+#                                             skipcheck is only key used.   
 #   $client                   - Channel open on the client.
 # Returns:
 #    1    - Continue processing.
@@ -3279,12 +3285,26 @@
     if ($hashref) {
         my $qresult='';
 	my $count=0;
+#
+# When dump is for roles.db, determine if LON-CAPA version checking is needed.
+# Sessions on 2.10 and later will include skipcheck => 1 in extra args ref,
+# to indicate no version checking is needed (in this case, checking occurs
+# on the server hosting the user session, when constructing the roles/courses 
+# screen).
+# 
         if ($extra ne '') {
             $extra = &Apache::lonnet::thaw_unescape($extra);
             $skipcheck = $extra->{'skipcheck'};
         }
         my @ids = &Apache::lonnet::current_machine_ids();
         my (%homecourses,$major,$minor,$now);
+# 
+# If dump is for roles.db from a pre-2.10 server, determine the LON-CAPA   
+# version on the server which requested the data. For LON-CAPA 2.9, the  
+# client session will have sent its LON-CAPA version when initiating the
+# connection. For LON-CAPA 2.8 and older, the version is retrieved from
+# the global %loncaparevs in lonnet.pm.
+# 
         if (($namespace eq 'roles') && (!$skipcheck)) {
             my $loncaparev = $clientversion;
             if ($loncaparev eq '') {
@@ -3302,8 +3322,18 @@
                     my $cdom = $1;
                     my $cnum = $2;
                     unless ($skipcheck) {
-                        my ($role,$end,$start) = split(/\_/,$value);
-                        if (!$end || $end > $now) {
+                        my ($role,$roleend,$rolestart) = split(/\_/,$value);
+                        if (!$roleend || $roleend > $now) {
+#
+# For active course roles, check that requesting server is running a LON-CAPA
+# version which meets any version requirements for the course. Do not include
+# the role amongst the results returned if the requesting server's version is
+# too old.
+#
+# This determination is handled differently depending on whether the course's 
+# homeserver is the current server, or whether it is a different server.
+# In both cases, the course's version requirement needs to be retrieved.
+# 
                             next unless (&releasereqd_check($cnum,$cdom,$key,$value,$major,
                                                             $minor,\%homecourses,\@ids));
                         }
@@ -3326,6 +3356,13 @@
 	    }
 	}
 	if (&untie_user_hash($hashref)) {
+#
+# If dump is for roles.db from a pre-2.10 server, check if the LON-CAPA
+# version requirements for courses for which the current server is the home
+# server permit course roles to be usable on the client server hosting the
+# user's session. If so, include those role results in the data returned to  
+# the client server.
+#
             if (($namespace eq 'roles') && (!$skipcheck)) {
                 if (keys(%homecourses) > 0) {
                     $qresult .= &check_homecourses(\%homecourses,$udom,$regexp,$count,
@@ -7437,6 +7474,20 @@
     return;
 }
 
+#
+# releasereqd_check() will determine if a LON-CAPA version (defined in the
+# $major,$minor args passed) is not too old to allow use of a role in a 
+# course ($cnum,$cdom args passed), if at least one of the following applies: 
+# (a) the course is a Community, (b) the course's home server is *not* the
+# current server, or (c) cached course information is not stale. 
+#
+# For the case where none of these apply, the course is added to the 
+# $homecourse hash ref (keys = courseIDs, values = array of a hash of roles).
+# The $homecourse hash ref is for courses for which the current server is the 
+# home server.  LON-CAPA version requirements are checked elsewhere for the
+# items in $homecourse.
+#
+
 sub releasereqd_check {
     my ($cnum,$cdom,$key,$value,$major,$minor,$homecourses,$ids) = @_;
     my $home = &Apache::lonnet::homeserver($cnum,$cdom);
@@ -7488,6 +7539,17 @@
     return 1;
 }
 
+# 
+# get_courseinfo_hash() is used to retrieve course information from the db
+# file: nohist_courseids.db for a course for which the current server is *not*
+# the home server.
+#
+# A hash of a hash will be retrieved. The outer hash contains a single key --
+# courseID -- for the course for which the data are being requested.
+# The contents of the inner hash, for that single item in the outer hash
+# are returned (and cached in memcache for 10 minutes).
+# 
+
 sub get_courseinfo_hash {
     my ($cnum,$cdom,$home) = @_;
     my %info;
@@ -7513,6 +7575,25 @@
     return;
 }
 
+#
+# check_homecourses() will retrieve course information for those courses which
+# are keys of the $homecourses hash ref (first arg). The nohist_courseids.db 
+# GDBM file is tied and course information for each course retrieved. Last   
+# visit (lasttime key) is also retrieved for each, and cached values updated  
+# for any courses last visited less than 24 hours ago. Cached values are also
+# updated for any courses included in the $homecourses hash ref.
+#
+# The reason for the 24 hours constraint is that the cron entry in 
+# /etc/cron.d/loncapa for /home/httpd/perl/refresh_courseids_db.pl causes 
+# cached course information to be updated nightly for courses with activity
+# within the past 24 hours.
+#
+# Role information for the user (included in a ref to an array of hashes as the
+# value for each key in $homecourses) is appended to the result returned by the
+# routine, which will in turn be appended to the string returned to the client
+# hosting the user's session.
+# 
+
 sub check_homecourses {
     my ($homecourses,$udom,$regexp,$count,$range,$start,$end,$major,$minor) = @_;
     my ($result,%addtocache);
@@ -7589,6 +7670,12 @@
     return $result;
 }
 
+#
+# useable_role() will compare the LON-CAPA version required by a course with 
+# the version available on the client server.  If the client server's version
+# is compatible, 1 will be returned.
+#
+
 sub useable_role {
     my ($reqdmajor,$reqdminor,$major,$minor) = @_; 
     if ($reqdmajor ne '' && $reqdminor ne '') {




More information about the LON-CAPA-cvs mailing list