[LON-CAPA-cvs] cvs: modules /msu localenroll.pm

raeburn raeburn at source.lon-capa.org
Thu Aug 17 15:58:20 EDT 2023


raeburn		Thu Aug 17 19:58:20 2023 EDT

  Modified files:              
    /modules/msu	localenroll.pm 
  Log:
  - For courses for Fall 2021 and later, get_sections(), validate_courseID(), 
    and validate_instcode() will check if connectivity is available to SISCS,
    and if not, will use queries to RO instead.
  - For routines that use &userinfo_searchtables(), use of queries to HR 
    discontinued, given that access to msudata.msu.edu is no longer available.
  
  
-------------- next part --------------
Index: modules/msu/localenroll.pm
diff -u modules/msu/localenroll.pm:1.93 modules/msu/localenroll.pm:1.94
--- modules/msu/localenroll.pm:1.93	Sun Feb 27 03:05:10 2022
+++ modules/msu/localenroll.pm	Thu Aug 17 19:58:20 2023
@@ -1,6 +1,6 @@
 # functions to glue school database system into Lon-CAPA for
 # automated enrollment
-# $Id: localenroll.pm,v 1.93 2022/02/27 03:05:10 raeburn Exp $
+# $Id: localenroll.pm,v 1.94 2023/08/17 19:58:20 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -294,18 +294,28 @@
         $subj =~tr/a-z/A-Z/;
         $crse =~tr/a-z/A-Z/;
         $term =~tr/a-z/A-Z/;
-        my $database = 'SIS';
+        my ($database,$dbh3,$dbflag, at order);
         if (($yr > 21) || (($yr == 21) && ($sem eq 'fs'))) {
-            $database = 'SISCS';
+            @order = ('SISCS','RO');
+        } else {
+            @order = ('SIS');
+        }
+        foreach my $key (@order) {
+            ($dbh3,$dbflag) = &connect_DB($key);
+            if ($dbflag) {
+                $database = $key;
+                last;
+            }
         }
-        my ($dbh3,$dbflag) = &connect_DB($database);
         if ($dbflag) {
             eval {
                 my $quotedsubj = $dbh3->quote($subj);
                 my $quotedcrse = $dbh3->quote($crse);
                 my $quotedterm = $dbh3->quote($term);
                 my $sth;
-                if ($database eq 'SISCS') {
+                if ($database eq 'RO') {
+                    $sth = $dbh3->prepare("SELECT DISTINCT(Sctn_Code) FROM RO_CLIFMS WHERE (Subj_Code = $quotedsubj AND Crse_Code = $quotedcrse AND Term_Code = $quotedterm) ORDER BY Sctn_Code");
+                } elsif ($database eq 'SISCS') {
                     $sth = $dbh3->prepare( "SELECT CLASS_SECTION FROM R_CLASSSCHEDULE_RV WHERE (SUBJECT = $quotedsubj AND CRSE_CODE = $quotedcrse AND TERM_DESCRSHORT = $quotedterm) ORDER BY CLASS_SECTION ");
                 } else {
                     $sth = $dbh3->prepare( "SELECT Sctn_Code FROM SISCRSS WHERE Subj_Code = $quotedsubj AND Crse_Code= $quotedcrse AND Sctn_Code != '998' AND Sctn_Term_Code =$quotedterm ");
@@ -543,11 +553,19 @@
         $crse =~tr/a-z/A-Z/;
         $term =~tr/a-z/A-Z/;
         $sec=~s/^_//;
-        my $database = 'SIS';
+        my ($database,$dbh3,$dbflag, at order);
         if (($yr > 21) || (($yr == 21) && ($sem eq 'fs'))) {
-            $database = 'SISCS';
+            @order = ('SISCS','RO');
+        } else {
+            @order = ('SIS');
+        }
+        foreach my $key (@order) {
+            ($dbh3,$dbflag) = &connect_DB($key);
+            if ($dbflag) {
+                $database = $key;
+                last;
+            }
         }
-        my ($dbh3,$dbflag) = &connect_DB($database);
         if ($dbflag) {
             eval {
                 my $quotedsubj = $dbh3->quote($subj);
@@ -555,7 +573,9 @@
                 my $quotedterm = $dbh3->quote($term);
                 my $quotedsec = $dbh3->quote($sec);
                 my $count;
-                if ($database eq 'SISCS') {
+                if ($database eq 'RO') {
+                    $count = $dbh3->selectrow_array( "SELECT count(*) FROM RO_CLIFMS WHERE (Subj_Code = $quotedsubj AND Crse_Code = $quotedcrse AND Sctn_Code = $quotedsec AND Term_Code = $quotedterm)" );
+                } elsif ($database eq 'SISCS') {
                     $count = $dbh3->selectrow_array( "SELECT count(*) FROM R_CLASSSCHEDULE_RV WHERE SUBJECT = $quotedsubj AND CRSE_CODE = $quotedcrse AND CLASS_SECTION = $quotedsec AND TERM_DESCRSHORT = $quotedterm ");
                 } else {
                     $count = $dbh3->selectrow_array( "SELECT count(*) FROM SISCRSS WHERE Subj_Code = $quotedsubj AND Crse_Code= $quotedcrse AND Sctn_Code= $quotedsec AND Sctn_Term_Code =$quotedterm ");
@@ -641,18 +661,28 @@
                 $outcome = "The course owner is not from the msu domain so can not be validated.";
             }
         } else {
-            $database = 'SIS';
+            my ($database, at order);
             if (($yr > 21) || (($yr == 21) && ($sem eq 'fs'))) {
-                $database = 'SISCS';
+                @order = ('SISCS','RO');
+            } else {
+                @order = ('SIS');
+            }
+            foreach my $key (@order) {
+                ($dbh,$dbflag) = &connect_DB($key);
+                if ($dbflag) {
+                    $database = $key;
+                    last;
+                }
             }
-            ($dbh,$dbflag) = &connect_DB($database);
             if ($dbflag) {
                 eval {
                     my $quotedsubj = $dbh->quote($subj);
                     my $quotedcrse = $dbh->quote($crse);
                     my $quotedterm = $dbh->quote($term);
                     my $count;
-                    if ($database eq 'SISCS') {
+                    if ($database eq 'RO') {
+                        $count = $dbh->selectrow_array( "SELECT count(*) FROM RO_CLIFMS WHERE (Subj_Code = $quotedsubj AND Crse_Code = $quotedcrse AND Term_Code = $quotedterm)" );
+                    } elsif ($database eq 'SISCS') {
                         $count = $dbh->selectrow_array( "SELECT count(*) FROM R_CLASSSCHEDULE_RV WHERE SUBJECT = $quotedsubj AND CRSE_CODE = $quotedcrse AND TERM_DESCRSHORT = $quotedterm ");
                     } else {
                         $count = $dbh->selectrow_array( "SELECT count(*) FROM SISCRSS WHERE Subj_Code = $quotedsubj AND Crse_Code= $quotedcrse AND Sctn_Term_Code =$quotedterm ");
@@ -666,7 +696,11 @@
                             $description .= ', '.$longsem{$sem}.' '.$longyr;
                         }
                         my $title;
-                        if ($database eq 'SISCS') {
+                        if ($database eq 'RO') {
+                            eval {
+                                $title = $dbh->selectrow_array( "SELECT DISTINCT(Title) FROM RO_ClassList WHERE (Subj_Code = $quotedsubj AND Crse_Code= $quotedcrse AND Term_Code = $quotedterm)" );
+                            };
+                        } elsif ($database eq 'SISCS') {
                             my $crsdate;
                             if ($sem eq 'fs') {
                                 $crsdate = $longyr.'-10-01';
@@ -699,13 +733,24 @@
                         my $quotedcrse = $dbh->quote($crse);
                         my $quotedterm = $dbh->quote($term);
                         my $credsth;
-                        if ($database eq 'SISCS') {
+                        if ($database eq 'RO') {
+                            $credsth = $dbh->prepare("SELECT DISTINCT(Sctn_Crdt_Hours) FROM RO_ClassList WHERE (Subj_Code = $quotedsubj AND Crse_Code = $quotedcrse AND Term_Code = $quotedterm)");
+                        } elsif ($database eq 'SISCS') {
                             $credsth = $dbh->prepare("SELECT UNITS_MAXIMUM FROM R_CLASSSCHEDULE_RV WHERE SUBJECT = $quotedsubj AND CRSE_CODE = $quotedcrse AND TERM_DESCRSHORT = $quotedterm");
                         } else {
                             $credsth = $dbh->prepare("SELECT Start_Term_Seq_Id,End_Term_Seq_Id,Credits FROM SISCRSD WHERE Subj_Code = $quotedsubj AND Crse_Code = $quotedcrse");
                         }
                         $credsth->execute();
-                        if ($database eq 'SISCS') {
+                        if ($database eq 'RO') {
+                            while (my($creds) = $credsth->fetchrow_array) {
+                                $creds =~ s/\s+//g;
+                                if ($creds =~ /^\d+\.?\d*$/) {
+                                    if ($creds > $credits) {
+                                        $credits = $creds;
+                                    }
+                                }
+                            }
+                        } elsif ($database eq 'SISCS') {
                             while (my($creds) = $credsth->fetchrow_array) {
                                 $creds =~ s/\s+//g;
                                 if ($creds =~ /^\d+\.?\d*$/) {
@@ -973,7 +1018,9 @@
     if ($dbflag) {
         eval {
             my $sth;
-            if ($database eq 'SIS') {
+            if ($database eq 'RO') {
+                $sth = $dbh->prepare("SELECT DISTINCT(Subj_Code) FROM RO_CLIFMS ORDER BY Subj_Code");
+            } elsif ($database eq 'SIS') {
                 $sth = $dbh->prepare("SELECT DISTINCT(Subj_Code) FROM SISCRSS");
             } else {
                 $sth = $dbh->prepare("SELECT DISTINCT(SUBJECT) FROM R_CLASSSCHEDULE_RV ORDER BY SUBJECT");
@@ -1289,7 +1336,7 @@
     return unless ((ref($dbh) eq 'HASH') &&
                    (ref($dbflag) eq 'HASH') &&
                    (ref($srchtables) eq 'HASH'));
-    my @order = ('ro','cs','hr');
+    my @order = ('ro','cs');
     my %tables = (
                     ro => {
                              Faculty => 'RO_CLIFMS',
@@ -1324,11 +1371,14 @@
                        cs => ['Faculty'],
                        hr => ['Student','Faculty','Staff','StuAff','Assistant','StaffAff'],
                      );
-    ($dbh->{'hr'},$dbflag->{'hr'}) = &connect_DB('HR');
-    ($dbh->{'cs'},$dbflag->{'cs'}) = &connect_DB('SISCS');
-    ($dbh->{'ro'},$dbflag->{'ro'}) = &connect_DB('RO');
+    my %dbnames = (
+                    'hr' => 'HR',
+                    'cs' => 'SISCS',
+                    'ro' => 'RO',
+                  );
     my @connected;
     foreach my $key (@order) {
+        ($dbh->{$key},$dbflag->{$key}) = &connect_DB($dbnames{$key});
         if ($dbflag->{$key}) {
             push(@connected,$key);
         }
@@ -1729,7 +1779,13 @@
                                    },
                             );
             if (keys(%dbflag)) {
-                my @order = ('hr','ro','cs');
+                my @order = ();
+                my @possorder = ('hr','ro','cs');
+                foreach my $key (@possorder) {
+                    if ($dbflag{$key}) {
+                        push(@order,$key);
+                    }
+                }
                 my $stoponmatch = 1;
                 foreach my $uname (keys(%{$instusers})) {
                     next unless ($uname =~ /^\w{2,8}$/);
@@ -1818,7 +1874,13 @@
                                            \%affiliation_by_table,$types);
     if (@connected) {
         if (keys(%dbflag)) {
-            my @order = ('hr','ro','cs');
+            my @order;
+            my @possorder = ('hr','ro','cs');
+            foreach my $key (@possorder) {
+                if ($dbflag{$key}) {
+                    push(@order,$key);
+                }
+            }
             my $stoponmatch = 1;
             my @ids;
             if ($srchterm ne '') {
@@ -1933,7 +1995,13 @@
         if (ref($affiliation_by_tableref) eq 'HASH') {
             %table_to_key = %{$affiliation_by_tableref};
         }
-        my @order = ('ro','cs','hr');
+        my @order = ();
+        my @possorder = ('ro','cs','hr');
+        foreach my $key (@possorder) {
+            if ($dbflagref->{$key}) {
+                push(@order,$key);
+            }
+        }
         my $matched = 0;
         foreach my $key (@order) {
             last if ($stoponmatch && $matched);


More information about the LON-CAPA-cvs mailing list