Diff for /loncom/enrollment/localenroll.pm between versions 1.60 and 1.61

version 1.60, 2021/03/31 02:19:58 version 1.61, 2021/06/15 20:52:27
Line 655  sub check_instclasses { Line 655  sub check_instclasses {
     return 'ok';      return 'ok';
 }  }
   
   =pod
   
   =item instsec_reformat()
   
    Inputs: $dom, $action, $instsecref
   
    $dom is the course's domain
    $action is either: clutter or declutter
    $instsecref is a reference to a hash, in which each key is
    course num:course code, and each value is either an array of 
    institutional sections, or (in the case of crosslisted courses)
    an array of institutional course sections.
   
    Returns: ok
   
    Side effects: will modify the items in the array as determined by
    code implemented for the domain.  Modification will differ depending
    on whether the action is clutter or declutter.
   
    The idea is that "clutter" will modify the name of the section such
    that a concatenation of institutional code then (modified) section
    will result in a string that other customized routines in localenroll.pm
    can separate without ambiguity into instituional code then (real)
    institutional section using a regular expression.
   
    Conversely, "declutter" will modify the name of an already modified
    item such that display of the concatenated string (e.g., for a 
    crosslisting in the course catalog) does not include the "added"
    characters used to eliminate ambiguity. 
   
    Examples (MSU):
   
    Starting in Fall 2021 at MSU, institution section numbers are no
    longer guaranteed to be three digit numbers (including leading zeroes).
   
    So, for example the course code: fs21phy183b might have sections:
    001, 002, LEC1, LEC2, and be crosslisted with fs21phy233b (with 
    sections: 730, LEC3, LEC4).
   
    The sections: LEC1, and LEC2 should be changed to _LEC1, and _LEC2
    before creating the inner keys in the %affiliates hash of a hash,
    passed to fetch_enrollment() in Enrollment.pm.  They will however
    be stored in the course's environment as LEC1 and LEC2.
   
    For the crosslistings, LEC3 and LEC4 should be changed to 
    _LEC3 and _LEC4 before storing in the course's environment.db file.
   
    In both cases when it comes time to extract the various components
    of an institutional section code (i.e., the concatenated string) in
    fetch_enrollment(), for example, the regexp used at MSU would be:
    
    if ($class =~ m/^([suf]s)(\d{2})(\w{2,4})(\d{3,4}[A-Za-z]?)(\d{3}|_[A-Za-z0-9]{1,5})$/) {
        my ($sem,$yr,$subj,$crse,$sec) = ($1,$2,$3,$4,$5);
   
    The three digit sections would match the \d{3} and the other sections
    (LEC1, LEC2 etc.) would match the _[A-Za-z0-9]{1,5}.
   
    The customization in &instsec_reformat() would be:
   
        if ($action eq 'clutter') {
            unless ($item =~ /^\d{3}$/) {
                $item = '_'.$item;
            }
        } elsif ($action eq 'declutter') {
            if ($item =~ /^([suf]s\d{2}\w{2,4}\d{3,4}[A-Za-z]?)(\d{3}|_[A-Za-z0-9]{1,5})$/) {
                my ($instcode,$instsec) = ($1,$2);
                $instsec =~ s/^_//;
                $item = $instcode.$instsec;
            } elsif ($item =~ /^_[A-Za-z0-9]{1,5}$/) {
                $item =~ s/^_//;
            }
        }
   
   =cut
   
   sub instsec_reformat {
       my ($dom,$action,$instsecref) = @;
       if ((ref($instsecref) eq 'HASH') &&
           (($action eq 'clutter') || ($action eq 'declutter'))) {
           foreach my $key (keys(%{$instsecref})) {
               if (ref($instsecref->{$key}) eq 'ARRAY') {
                   foreach my $sec (@{$instsecref->{$key}}) {
                       if ($action eq 'clutter') {
                           # modify the section, as needed.
                           next;
                       } elsif ($action eq 'declutter') {
                           # modify the section, as needed.
                           next;
                       }
                   }
               }
           }
       }
       return 'ok';
   }
   
 =pod  =pod
   

Removed from v.1.60  
changed lines
  Added in v.1.61


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>