--- loncom/enrollment/localenroll.pm 2021/06/15 20:52:27 1.61 +++ loncom/enrollment/localenroll.pm 2022/02/27 01:43:14 1.64 @@ -1,6 +1,6 @@ # functions to glue school database system into Lon-CAPA for # automated enrollment -# $Id: localenroll.pm,v 1.61 2021/06/15 20:52:27 raeburn Exp $ +# $Id: localenroll.pm,v 1.64 2022/02/27 01:43:14 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -731,7 +731,7 @@ sub check_instclasses { =cut sub instsec_reformat { - my ($dom,$action,$instsecref) = @; + my ($dom,$action,$instsecref) = @_; if ((ref($instsecref) eq 'HASH') && (($action eq 'clutter') || ($action eq 'declutter'))) { foreach my $key (keys(%{$instsecref})) { @@ -1072,6 +1072,13 @@ sub instcode_defaults { (d) $lc_users - reference to hash containing LON-CAPA usernames in in domain $dom, as keys. Needed if institutional 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 if an error occurred. side effects - populates the $instusers and $instids refs to hashes. @@ -1082,7 +1089,7 @@ sub instcode_defaults { =cut sub allusers_info { - my ($dom,$instusers,$instids,$lc_users) = @_; + my ($dom,$instusers,$instids,$lc_users,$counts) = @_; my $outcome = 'ok'; return $outcome; } @@ -1150,7 +1157,7 @@ sub get_userinfo { =pod -=item get_multusersinfo +=item get_multusersinfo() (a) $dom - domain (b) $type - username or id @@ -1243,8 +1250,8 @@ sub inst_usertypes { keys of top level hash are short names (e.g., netid, noncredit) for each key, value is a hash - desc => long name for rule - rule => description of rule + name => long name for rule + desc => description of rule authtype => (krb5,krb4,int, or loc) authentication type for rule authparm => authentication parameter for rule @@ -1278,8 +1285,8 @@ sub username_rules { keys of top level hash are short names (e.g., netid, noncredit) for each key, value is a hash - desc => long name for rule - rule => description of rule + name => long name for rule + desc => description of rule (c) $rulesorder - reference to array containing rule names in order to be displayed @@ -1305,8 +1312,8 @@ sub id_rules { keys of top level hash are short names (e.g., netid) for each key, value is a hash - desc => long name for rule - rule => description of rule + name => long name for rule + desc => description of rule (c) $rulesorder - reference to array containing rule names in order to be displayed @@ -1324,6 +1331,46 @@ sub selfcreate_rules { =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() Incoming data: four arguments @@ -1331,7 +1378,7 @@ sub selfcreate_rules { (b) $uname - username to 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 rule checked + hash of results for rules checked - keys are rule names - values are: 1 or 0 (for matched or unmatched) @@ -1355,7 +1402,7 @@ sub username_check { (b) $id - ID to 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 rule checked + hash of results for rules checked - keys are rule names - values are: 1 or 0 (for matched or unmatched) @@ -1379,7 +1426,7 @@ sub id_check { (b) $selfcreatename - e-mail proposed as username (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 rule checked + hash of results for rules checked - keys are rule names - values are: 1 or 0 (for matched or unmatched) @@ -1393,6 +1440,44 @@ sub selfcreate_check { my $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