[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