From raeburn at source.lon-capa.org Mon Oct 2 17:01:22 2023 From: raeburn at source.lon-capa.org (raeburn) Date: Mon, 02 Oct 2023 21:01:22 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /enrollment Autoenroll.pl /interface lonmenu.pm lonuserutils.pm /lonnet/perl lonnet.pm /misc refresh_courseids_db.pl Message-ID: raeburn Mon Oct 2 21:01:22 2023 EDT Modified files: /loncom/interface lonmenu.pm lonuserutils.pm /loncom/misc refresh_courseids_db.pl /loncom/enrollment Autoenroll.pl /loncom/lonnet/perl lonnet.pm Log: - Bug 6979. "View As" form in Functions menu includes domain dropdown list if users in course are from more than one domain. Use course's environment.db to store comma separated list of unique domains to which course users belong. -------------- next part -------------- Index: loncom/interface/lonmenu.pm diff -u loncom/interface/lonmenu.pm:1.538 loncom/interface/lonmenu.pm:1.539 --- loncom/interface/lonmenu.pm:1.538 Thu Sep 28 15:56:48 2023 +++ loncom/interface/lonmenu.pm Mon Oct 2 21:01:21 2023 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.538 2023/09/28 15:56:48 raeburn Exp $ +# $Id: lonmenu.pm,v 1.539 2023/10/02 21:01:21 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1081,11 +1081,30 @@ if (($env{'request.symb'} ne '') && ($env{'request.filename'}=~/$LONCAPA::assess_re/) && (($perms{'mgr'}) || ($perms{'vgr'}))) { - my ($viewas,$text,$change,$visibility,$vuname,$vudom,$vid,$leftvis,$defdom,$righticon); + my ($viewas,$text,$change,$visibility,$vuname,$vudom,$vid,$leftvis,$defdom, + $domselector,$righticon); my %lt = &Apache::lonlocal::texthash( view => 'View', upda => 'Update', ); + my $possdomstr = $env{'course.'.$env{'request.course.id'}.'.internal.userdomains'}; + if ($possdomstr =~ /,/) { + my @possdoms = split(/,/,$possdomstr); + if ($env{'request.user_in_effect'} =~ /^$match_username:($match_domain)$/) { + $defdom = $1; + } elsif (grep(/^\Q$cdom\E$/, at possdoms)) { + $defdom = $cdom; + } elsif (&Apache::lonnet::domain($possdoms[0]) ne '') { + $defdom = $possdoms[0]; + } + $domselector = &Apache::loncommon::select_dom_form($defdom,'vudom','','','',\@possdoms); + } elsif (($possdomstr ne '') && (&Apache::lonnet::domain($possdomstr) ne '')) { + if ($env{'request.user_in_effect'} =~ /^$match_username:($match_domain)$/) { + $defdom = $1; + } else { + $defdom = $possdomstr; + } + } if ($env{'request.user_in_effect'} =~ /^($match_username):($match_domain)$/) { ($vuname,$vudom) = ($1,$2); unless (&Apache::lonnet::is_advanced_user($vudom,$vuname)) { @@ -1103,19 +1122,29 @@ $change = 'on'; $visibility = 'none'; $leftvis = 'inline'; - $defdom = $cdom; + if ($defdom eq '') { + $defdom = $cdom; + } } my $sellink = &Apache::loncommon::selectstudent_link('userview','vuname','vudom','','','vuidentifier'); my $selscript=&Apache::loncommon::studentbrowser_javascript(); my $shownsymb = &HTML::Entities::encode(&Apache::lonenc::check_encrypt($env{'request.symb'}),'<>&"'); - my $input = &mt('[_1]Username:[_2] or [_3]ID:[_4] | ', - '', - ''). - ''. - '', - ''; + my $input; + my @items = ( + '', + '' + ); + if ($domselector) { + push(@items,$domselector); + $input = &mt('[_1]User:[_2] or [_3]ID:[_4] at [_5] | ', at items); + } else { + $input = &mt('[_1]Username:[_2] or [_3]ID:[_4] | ', at items). + ''; + } + $input .= '', + ''; my $chooser = < Index: loncom/interface/lonuserutils.pm diff -u loncom/interface/lonuserutils.pm:1.216 loncom/interface/lonuserutils.pm:1.217 --- loncom/interface/lonuserutils.pm:1.216 Tue Aug 1 15:56:32 2023 +++ loncom/interface/lonuserutils.pm Mon Oct 2 21:01:21 2023 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Utility functions for managing LON-CAPA user accounts # -# $Id: lonuserutils.pm,v 1.216 2023/08/01 15:56:32 raeburn Exp $ +# $Id: lonuserutils.pm,v 1.217 2023/10/02 21:01:21 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -4723,7 +4723,7 @@ $fieldstype{$field.'_choice'} = 'scalar'; } &Apache::loncommon::store_course_settings('enrollment_upload',\%fieldstype); - my ($cid,$crstype,$setting,$crsdom,$crsnum); + my ($cid,$crstype,$setting,$crsdom,$crsnum,$oldcrsuserdoms); if ($context eq 'domain') { $setting = $env{'form.roleaction'}; } @@ -4738,6 +4738,11 @@ $crstype = &Apache::loncommon::course_type($cid); $crsdom = $env{'form.dcdomain'}; $crsnum = $env{'form.dccourse'}; + if (exists($env{'course.'.$cid.'.internal.userdomains'})) { + $oldcrsuserdoms = 1; + } + my %coursedesc = &Apache::lonnet::coursedescription($cid,{ one_time => 1 }); + $env{'course.'.$cid.'.internal.userdomains'} = $coursedesc{'internal.userdomains'}; } } my ($startdate,$enddate) = &get_dates_from_form(); @@ -5564,6 +5569,13 @@ } # end of loop $r->print(''); &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); + if (($context eq 'domain') && ($setting eq 'course')) { + unless ($oldcrsuserdoms) { + if (exists($env{'course.'.$cid.'.internal.userdomains'})) { + delete($env{'course.'.$cid.'.internal.userdomains'}); + } + } + } } # Flush the course logs so reverse user roles immediately updated $r->register_cleanup(\&Apache::lonnet::flushcourselogs); Index: loncom/misc/refresh_courseids_db.pl diff -u loncom/misc/refresh_courseids_db.pl:1.23 loncom/misc/refresh_courseids_db.pl:1.24 --- loncom/misc/refresh_courseids_db.pl:1.23 Wed Mar 31 02:19:59 2021 +++ loncom/misc/refresh_courseids_db.pl Mon Oct 2 21:01:21 2023 @@ -1,7 +1,7 @@ #!/usr/bin/perl # The LearningOnline Network # -# $Id: refresh_courseids_db.pl,v 1.23 2021/03/31 02:19:59 raeburn Exp $ +# $Id: refresh_courseids_db.pl,v 1.24 2023/10/02 21:01:21 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -351,6 +351,11 @@ } } } + my $curruserdoms = $courseinfo{'internal.userdomains'}; + my $updateduserdoms = &get_unique_domains($cdom,$cnum); + if ($curruserdoms ne $updateduserdoms) { + $changes{'internal.userdomains'} = $updateduserdoms; + } if (keys(%changes)) { if (&Apache::lonnet::put('environment',\%changes,$cdom,$cnum) eq 'ok') { print $fh "Course's environment.db for ".$cdom."_".$cnum." successfully updated with following entries: "; @@ -387,3 +392,28 @@ return $lastupdate; } +sub get_unique_domains { + my ($cdom,$cnum) = @_; + my %classlist = &Apache::lonnet::dump('classlist',$cdom,$cnum); + my (%uniquedom,$udomstr); + foreach my $key (keys(%classlist)) { + my $udom = (split(/:/,$key))[1]; + $uniquedom{$udom} = 1; + } + my %dumphash = + &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum); + foreach my $entry (keys(%dumphash)) { + my $udom = (split(/\:/,$entry))[2]; + $uniquedom{$udom} = 1; + } + foreach my $udom (keys(%uniquedom)) { + if (&Apache::lonnet::domain($udom) eq '') { + delete($uniquedom{$udom}); + } + } + if (keys(%uniquedom) > 0) { + $udomstr = join(',',sort(keys(%uniquedom))); + } + return $udomstr; +} + Index: loncom/enrollment/Autoenroll.pl diff -u loncom/enrollment/Autoenroll.pl:1.37 loncom/enrollment/Autoenroll.pl:1.38 --- loncom/enrollment/Autoenroll.pl:1.37 Thu Jan 13 03:50:32 2022 +++ loncom/enrollment/Autoenroll.pl Mon Oct 2 21:01:22 2023 @@ -1,7 +1,7 @@ #!/usr/bin/perl # #Automated Enrollment script -# $Id: Autoenroll.pl,v 1.37 2022/01/13 03:50:32 raeburn Exp $ +# $Id: Autoenroll.pl,v 1.38 2023/10/02 21:01:22 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -198,9 +198,14 @@ print $fh "$logmsg\n"; print $fh &mt('Messages end for [_1]',$crs)."\n"; if ($changecount > 0) { -# Set $env{'user.name'}, $env{'user.domain'}, $env{'user.home'} -# and $env{'request.course.id'} for use by logging in lonmsg +# Set $env{'user.name'}, $env{'user.domain'}, $env{'user.home'}, +# $env{'request.course.id'} for use by logging in lonmsg, +# and $env{'course.'.$env{'request.course.id'}.'.internal.userdomains'} +# for use in courserolelog $env{'request.course.id'} = $dom.'_'.$crs; + if (exists($enrollvar{$crs}{'userdomains'})) { + $env{'course.'.$dom.'_'.$crs.'.internal.userdomains'} = $enrollvar{$crs}{'userdomains'}; + } my ($ownername,$ownerdom); if ($enrollvar{$crs}{'courseowner'} ne '') { if ($enrollvar{$crs}{'courseowner'} =~ /:/) { @@ -273,6 +278,9 @@ } delete($env{'user.name'}); delete($env{'user.home'}); + if (exists($enrollvar{$crs}{'userdomains'})) { + delete($env{'course.'.$dom.'_'.$crs.'.internal.userdomains'}); + } delete($env{'request.course.id'}); $env{'user.domain'} = $dom; } Index: loncom/lonnet/perl/lonnet.pm diff -u loncom/lonnet/perl/lonnet.pm:1.1514 loncom/lonnet/perl/lonnet.pm:1.1515 --- loncom/lonnet/perl/lonnet.pm:1.1514 Sat Jul 29 20:33:26 2023 +++ loncom/lonnet/perl/lonnet.pm Mon Oct 2 21:01:22 2023 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.1514 2023/07/29 20:33:26 raeburn Exp $ +# $Id: lonnet.pm,v 1.1515 2023/10/02 21:01:22 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -5471,6 +5471,36 @@ $storehash{'group'} = $sec; } else { $storehash{'section'} = $sec; + my ($curruserdomstr,$newuserdomstr); + if (exists($env{'course.'.$cdom.'_'.$cnum.'.internal.userdomains'})) { + $curruserdomstr = $env{'course.'.$env{'request.course.id'}.'.internal.userdomains'}; + } else { + my %courseinfo = &coursedescription($cdom.'/'.$cnum); + $curruserdomstr = $courseinfo{'internal.userdomains'}; + } + if ($currusedomstr ne '') { + my @udoms = split(/,/,$courseinfo{'internal.userdomains'}); + unless (grep(/^\Q$domain\E/, at udoms)) { + push(@udoms,$domain); + $newuserdomstr = join(',',sort(@udoms)); + } + } else { + $newuserdomstr = $domain; + } + if ($newuserdomstr ne '') { + my $putresult = &put('environment',{ 'internal.userdomains' => $newuserdomstr }, + $cdom,$cnum); + if ($putresult eq 'ok') { + unless (($selfenroll) || ($context eq 'selfenroll')) { + if (($context eq 'createcourse') || ($context eq 'requestcourses') || + ($context eq 'automated') || ($context eq 'domain')) { + $env{'course.'.$cdom.'_'.$cnum.'.internal.userdomains'} = $newuserdomstr; + } elsif ($env{'request.course.id'} eq $cdom.'_'.$cnum) { + &appenv({'course.'.$cdom.'_'.$cnum.'.internal.userdomains' => $newuserdomstr}); + } + } + } + } } &write_log('course',$namespace,\%storehash,$delflag,$username, $domain,$cnum,$cdom); From raeburn at source.lon-capa.org Thu Oct 5 21:22:06 2023 From: raeburn at source.lon-capa.org (raeburn) Date: Fri, 06 Oct 2023 01:22:06 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /lonnet/perl lonnet.pm Message-ID: raeburn Fri Oct 6 01:22:06 2023 EDT Modified files: /loncom/lonnet/perl lonnet.pm Log: - Bug 6979 Fix typos in rev. 1.1515 Remove some trailing whitespace Index: loncom/lonnet/perl/lonnet.pm diff -u loncom/lonnet/perl/lonnet.pm:1.1515 loncom/lonnet/perl/lonnet.pm:1.1516 --- loncom/lonnet/perl/lonnet.pm:1.1515 Mon Oct 2 21:01:22 2023 +++ loncom/lonnet/perl/lonnet.pm Fri Oct 6 01:22:06 2023 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.1515 2023/10/02 21:01:22 raeburn Exp $ +# $Id: lonnet.pm,v 1.1516 2023/10/06 01:22:06 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -5471,15 +5471,15 @@ $storehash{'group'} = $sec; } else { $storehash{'section'} = $sec; - my ($curruserdomstr,$newuserdomstr); + my ($curruserdomstr,$newuserdomstr); if (exists($env{'course.'.$cdom.'_'.$cnum.'.internal.userdomains'})) { $curruserdomstr = $env{'course.'.$env{'request.course.id'}.'.internal.userdomains'}; - } else { + } else { my %courseinfo = &coursedescription($cdom.'/'.$cnum); $curruserdomstr = $courseinfo{'internal.userdomains'}; } - if ($currusedomstr ne '') { - my @udoms = split(/,/,$courseinfo{'internal.userdomains'}); + if ($curruserdomstr ne '') { + my @udoms = split(/,/,$curruserdomstr); unless (grep(/^\Q$domain\E/, at udoms)) { push(@udoms,$domain); $newuserdomstr = join(',',sort(@udoms)); From raeburn at source.lon-capa.org Thu Oct 5 22:04:47 2023 From: raeburn at source.lon-capa.org (raeburn) Date: Fri, 06 Oct 2023 02:04:47 -0000 Subject: [LON-CAPA-cvs] cvs: loncom /interface lonmenu.pm Message-ID: raeburn Fri Oct 6 02:04:47 2023 EDT Modified files: /loncom/interface lonmenu.pm Log: - Bug 6979. "View As" form in Functions menu includes domain dropdown list if users in course are from more than one domain; domain in hidden input tag otherwise Index: loncom/interface/lonmenu.pm diff -u loncom/interface/lonmenu.pm:1.539 loncom/interface/lonmenu.pm:1.540 --- loncom/interface/lonmenu.pm:1.539 Mon Oct 2 21:01:21 2023 +++ loncom/interface/lonmenu.pm Fri Oct 6 02:04:47 2023 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.539 2023/10/02 21:01:21 raeburn Exp $ +# $Id: lonmenu.pm,v 1.540 2023/10/06 02:04:47 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1122,7 +1122,7 @@ $change = 'on'; $visibility = 'none'; $leftvis = 'inline'; - if ($defdom eq '') { + if ($defdom eq '') { $defdom = $cdom; } } @@ -2421,7 +2421,13 @@ function validCourseUser(form,change) { var possuname = form.elements['vuname'].value; var possuid = form.elements['vid'].value; - var possudom = form.elements['vudom'].value; + var domelem = form.elements['vudom']; + var possudom = ''; + if ((domelem.tagName === 'INPUT') && ((domelem.type === 'text') || (domelem.type === 'hidden'))) { + possudom = domelem.value; + } else if (domelem.tagName === 'SELECT') { + possudom = domelem.options[domelem.selectedIndex].value; + } if ((possuname == '') && (possuid == '')) { if (change == 'off') { form.elements['LC_viewas'].value = '';