version 1.60, 2021/03/31 02:19:58
|
version 1.64, 2022/02/27 01:43:14
|
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 |
|
|
Line 977 sub instcode_defaults {
|
Line 1072 sub instcode_defaults {
|
(d) $lc_users - reference to hash containing LON-CAPA usernames in |
(d) $lc_users - reference to hash containing LON-CAPA usernames in |
in domain $dom, as keys. Needed if institutional |
in domain $dom, as keys. Needed if institutional |
data source only allows query by username. |
data source only allows query by username. |
|
(e) $counts - reference to hash (optional), for use when called |
|
from Autoupdate.pl which can contain counts for |
|
user-specified items retrieved in allusers_info() |
|
or in custom subroutines which it calls. Key in |
|
hashref, and count value will be printed to |
|
autoupdate.log by Autoupdate.pl. |
|
|
returns 1 parameter - 'ok' if no processing error, or other value |
returns 1 parameter - 'ok' if no processing error, or other value |
if an error occurred. |
if an error occurred. |
side effects - populates the $instusers and $instids refs to hashes. |
side effects - populates the $instusers and $instids refs to hashes. |
Line 987 sub instcode_defaults {
|
Line 1089 sub instcode_defaults {
|
=cut |
=cut |
|
|
sub allusers_info { |
sub allusers_info { |
my ($dom,$instusers,$instids,$lc_users) = @_; |
my ($dom,$instusers,$instids,$lc_users,$counts) = @_; |
my $outcome = 'ok'; |
my $outcome = 'ok'; |
return $outcome; |
return $outcome; |
} |
} |
Line 1055 sub get_userinfo {
|
Line 1157 sub get_userinfo {
|
|
|
=pod |
=pod |
|
|
=item get_multusersinfo |
=item get_multusersinfo() |
|
|
(a) $dom - domain |
(a) $dom - domain |
(b) $type - username or id |
(b) $type - username or id |
Line 1148 sub inst_usertypes {
|
Line 1250 sub inst_usertypes {
|
keys of top level hash are short names |
keys of top level hash are short names |
(e.g., netid, noncredit) |
(e.g., netid, noncredit) |
for each key, value is a hash |
for each key, value is a hash |
desc => long name for rule |
name => long name for rule |
rule => description of rule |
desc => description of rule |
authtype => (krb5,krb4,int, or loc) |
authtype => (krb5,krb4,int, or loc) |
authentication type for rule |
authentication type for rule |
authparm => authentication parameter for rule |
authparm => authentication parameter for rule |
Line 1183 sub username_rules {
|
Line 1285 sub username_rules {
|
keys of top level hash are short names |
keys of top level hash are short names |
(e.g., netid, noncredit) |
(e.g., netid, noncredit) |
for each key, value is a hash |
for each key, value is a hash |
desc => long name for rule |
name => long name for rule |
rule => description of rule |
desc => description of rule |
|
|
(c) $rulesorder - reference to array containing rule names |
(c) $rulesorder - reference to array containing rule names |
in order to be displayed |
in order to be displayed |
Line 1210 sub id_rules {
|
Line 1312 sub id_rules {
|
keys of top level hash are short names |
keys of top level hash are short names |
(e.g., netid) |
(e.g., netid) |
for each key, value is a hash |
for each key, value is a hash |
desc => long name for rule |
name => long name for rule |
rule => description of rule |
desc => description of rule |
|
|
(c) $rulesorder - reference to array containing rule names |
(c) $rulesorder - reference to array containing rule names |
in order to be displayed |
in order to be displayed |
Line 1229 sub selfcreate_rules {
|
Line 1331 sub selfcreate_rules {
|
|
|
=pod |
=pod |
|
|
|
=item unamemap_rules() |
|
|
|
Incoming data: three arguments |
|
(a) $dom - domain |
|
(b) $ruleshash - reference to hash containing rules |
|
(a hash of a hash) |
|
keys of top level hash are short names |
|
(e.g., netid) |
|
for each key, value is a hash |
|
name => long name for rule |
|
desc => description of rule |
|
|
|
For example: |
|
|
|
%{$ruleshash} = ( |
|
emailaddress => { |
|
name => 'Email address to UserID', |
|
desc => 'Extract userID from userID@example.tld', |
|
}, |
|
); |
|
would enable display of a checkbox for: 'Email address to UserID' in the |
|
"Available conversions" item in the "Mapping for missing usernames via standard log-in" |
|
panel available to a Domain Coordinator via: |
|
Main Menu > Set domain configuration > Display ("Default authentication/language/timezone/portal/types" checked) |
|
|
|
(c) $rulesorder - reference to array containing rule names |
|
in order to be displayed |
|
|
|
returns 'ok' if no processing error. |
|
|
|
=cut |
|
|
|
sub unamemap_rules { |
|
my ($dom,$ruleshash,$rulesorder) = @_; |
|
my $outcome; |
|
return $outcome; |
|
} |
|
|
|
=pod |
|
|
=item username_check() |
=item username_check() |
|
|
Incoming data: four arguments |
Incoming data: four arguments |
Line 1236 sub selfcreate_rules {
|
Line 1378 sub selfcreate_rules {
|
(b) $uname - username to compare against rules (scalar) |
(b) $uname - username to compare against rules (scalar) |
(c) $to_check (reference to array of rule names to check) |
(c) $to_check (reference to array of rule names to check) |
(d) $resultshash (reference to hash of results) |
(d) $resultshash (reference to hash of results) |
hash of results for rule checked |
hash of results for rules checked |
- keys are rule names |
- keys are rule names |
- values are: 1 or 0 (for matched or unmatched) |
- values are: 1 or 0 (for matched or unmatched) |
|
|
Line 1260 sub username_check {
|
Line 1402 sub username_check {
|
(b) $id - ID to compare against rules (scalar) |
(b) $id - ID to compare against rules (scalar) |
(c) $to_check (reference to array of rule names to check) |
(c) $to_check (reference to array of rule names to check) |
(d) $resultshash (reference to hash of results) |
(d) $resultshash (reference to hash of results) |
hash of results for rule checked |
hash of results for rules checked |
- keys are rule names |
- keys are rule names |
- values are: 1 or 0 (for matched or unmatched) |
- values are: 1 or 0 (for matched or unmatched) |
|
|
Line 1284 sub id_check {
|
Line 1426 sub id_check {
|
(b) $selfcreatename - e-mail proposed as username (compare against rules - scalar) |
(b) $selfcreatename - e-mail proposed as username (compare against rules - scalar) |
(c) $to_check (reference to array of rule names to check) |
(c) $to_check (reference to array of rule names to check) |
(d) $resultshash (reference to hash of results) |
(d) $resultshash (reference to hash of results) |
hash of results for rule checked |
hash of results for rules checked |
- keys are rule names |
- keys are rule names |
- values are: 1 or 0 (for matched or unmatched) |
- values are: 1 or 0 (for matched or unmatched) |
|
|
Line 1298 sub selfcreate_check {
|
Line 1440 sub selfcreate_check {
|
my $outcome; |
my $outcome; |
return $outcome; |
return $outcome; |
} |
} |
|
|
|
=pod |
|
|
|
=item unamemap_check() |
|
|
|
Incoming data: four arguments |
|
(a) $dom - domain (scalar) |
|
(b) $uname - username entered on log-in page (compare against rules - scalar) |
|
(c) $to_check (reference to array of rule names to check) |
|
(d) $resultshash (reference to hash of results) |
|
hash of results for rules checked |
|
- keys are rule names |
|
- values are derived username from substitution operation |
|
applied to $uname. |
|
|
|
For example, in the msu domain the rule "msuemail" will replace an MSU |
|
email address submitted as a username, with the part before the @msu.edu, |
|
(known as the MSUNetID), which is what is used in LON-CAPA as a username. |
|
|
|
if ($dom eq 'msu') { |
|
foreach my $item (@{$to_check}) { |
|
if ($item eq 'msuemail') { |
|
if ($uname =~ /^(\w{2,8})\@msu\.edu$/) { |
|
$resultshash->{$item} = $1; |
|
} |
|
} |
|
} |
|
} |
|
|
|
returns 'ok' if no processing error. |
|
|
|
=cut |
|
|
|
sub unamemap_check { |
|
my ($dom,$uname,$to_check,$resultshash) = @_; |
|
my $outcome; |
|
return $outcome; |
|
} |
|
|
=pod |
=pod |
|
|