--- loncom/interface/loncreateuser.pm 2022/11/23 02:55:37 1.465 +++ loncom/interface/loncreateuser.pm 2023/08/01 15:56:32 1.469 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Create a user # -# $Id: loncreateuser.pm,v 1.465 2022/11/23 02:55:37 raeburn Exp $ +# $Id: loncreateuser.pm,v 1.469 2023/08/01 15:56:32 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -3978,7 +3978,7 @@ sub update_roles { my $now=time; my @rolechanges; my (%disallowed,%got_role_approvals,%got_instdoms,%process_by,%instdoms, - %pending,%reject,%notifydc); + %pending,%reject,%notifydc,%status,%unauthorized,%currqueued); $got_role_approvals{$context} = ''; $process_by{$context} = {}; my @domroles = &Apache::lonuserutils::domain_roles(); @@ -4101,7 +4101,8 @@ sub update_roles { next if (&Apache::lonuserutils::restricted_dom($context,$id,$udom, $uname,$role,$now,0,$cdom,$cnum,$csec,$credits, \%process_by,\%instdoms,\%got_role_approvals, - \%got_instdoms,\%reject,\%pending,\%notifydc)); + \%got_instdoms,\%reject,\%pending,\%notifydc, + \%status,\%unauthorized,\%currqueued)); } my $result = &Apache::loncommon::commit_studentrole(\$logmsg,$udom,$uname,$url,$role,$now,0,$cdom,$cnum,$csec,$context,$credits); if (($result =~ /^error/) || ($result eq 'not_in_class') || ($result eq 'unknown_course') || ($result eq 'refused')) { @@ -4131,7 +4132,7 @@ sub update_roles { next if (&Apache::lonuserutils::restricted_dom($context,$id,$udom, $uname,$role,$now,0,$cdom,$cnum,$csec,'',\%process_by, \%instdoms,\%got_role_approvals,\%got_instdoms,\%reject, - \%pending,\%notifydc)); + \%pending,\%notifydc,\%status,\%unauthorized,\%currqueued)); } } my $result=&Apache::lonnet::assignrole($env{'form.ccdomain'}, @@ -4160,7 +4161,7 @@ sub update_roles { next if (&Apache::lonuserutils::restricted_dom($context,$id,$udom, $uname,$role,$now,0,$cdom,$cnum,$csec,'',\%process_by, \%instdoms,\%got_role_approvals,\%got_instdoms,\%reject, - \%pending,\%notifydc)); + \%pending,\%notifydc,\%status,\%unauthorized,\%currqueued)); } } my $result = &Apache::lonnet::assigncustomrole( @@ -4203,7 +4204,7 @@ sub update_roles { next if (&Apache::lonuserutils::restricted_dom($context,$id,$udom, $uname,$role,$start,$end,$one,$two,'','',\%process_by, \%instdoms,\%got_role_approvals,\%got_instdoms,\%reject, - \%pending,\%notifydc)); + \%pending,\%notifydc,\%status,\%unauthorized,\%currqueued)); } $r->print(&Apache::loncommon::commit_customrole($udom,$uname,$url,$three,$four,$five,$start,$end,$context)); } else { @@ -4223,7 +4224,7 @@ sub update_roles { next if (&Apache::lonuserutils::restricted_dom($context,$secid,$udom, $uname,$role,$start,$end,$one,$two,$sec,'',\%process_by, \%instdoms,\%got_role_approvals,\%got_instdoms,\%reject, - \%pending,\%notifydc)); + \%pending,\%notifydc,\%status,\%unauthorized,\%currqueued)); } $numchanges ++; $r->print(&Apache::loncommon::commit_customrole($udom,$uname,$securl,$three,$four,$five,$start,$end,$context)); @@ -4245,7 +4246,6 @@ sub update_roles { 0 ); my $url='/'.$one.'/'.$two; my $id = $url.'_'.$three; - my $type = 'three'; # split multiple sections my %sections = (); my $num_sections = &build_roles($env{'form.sec_'.$one.'_'.$two.'_'.$three},\%sections,$three); @@ -4266,7 +4266,7 @@ sub update_roles { next if (&Apache::lonuserutils::restricted_dom($context,$id,$udom, $uname,$three,$start,$end,$one,$two,'',$credits,\%process_by, \%instdoms,\%got_role_approvals,\%got_instdoms,\%reject, - \%pending,\%notifydc)); + \%pending,\%notifydc,\%status,\%unauthorized,\%currqueued)); } $numchanges ++; $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$three,$start,$end,$one,$two,'',$context,$credits)); @@ -4290,7 +4290,7 @@ sub update_roles { $restricted = &Apache::lonuserutils::restricted_dom($context,$secid,$udom, $uname,$three,$start,$end,$one,$two,$sec,$credits,\%process_by, \%instdoms,\%got_role_approvals,\%got_instdoms,\%reject, - \%pending,\%notifydc); + \%pending,\%notifydc,\%status,\%unauthorized,\%currqueued); next if ($restricted); } $numchanges ++; @@ -4305,7 +4305,7 @@ sub update_roles { $restricted = &Apache::lonuserutils::restricted_dom($context,$id,$udom, $uname,$three,$start,$end,$one,$two,'',$credits,\%process_by, \%instdoms,\%got_role_approvals,\%got_instdoms,\%reject, - \%pending,\%notifydc); + \%pending,\%notifydc,\%status,\%unauthorized,\%currqueued); next if ($restricted); } $numchanges ++; @@ -4329,6 +4329,7 @@ sub update_roles { my $two = $2; my $url='/'.$one.'/'; my $id = $url.'_'.$two; + my ($cdom,$cnum) = split(/\//,$one); # split multiple sections my %sections = (); my ($restricted,$numchanges); @@ -4336,9 +4337,9 @@ sub update_roles { if ($num_sections == 0) { unless ($udom eq $one) { $restricted = &Apache::lonuserutils::restricted_dom($context,$id,$udom, - $uname,$two,$start,$end,$one,$two,'','',\%process_by, + $uname,$two,$start,$end,$cdom,$cnum,'','',\%process_by, \%instdoms,\%got_role_approvals,\%got_instdoms,\%reject, - \%pending,\%notifydc); + \%pending,\%notifydc,\%status,\%unauthorized,\%currqueued); next if ($restricted); } $numchanges ++; @@ -4352,9 +4353,9 @@ sub update_roles { unless ($udom eq $one) { undef($restricted); $restricted = &Apache::lonuserutils::restricted_dom($context,$secid,$udom, - $uname,$two,$start,$end,$one,$two,$sec,'',\%process_by, + $uname,$two,$start,$end,$cdom,$cnum,$sec,'',\%process_by, \%instdoms,\%got_role_approvals,\%got_instdoms,\%reject, - \%pending,\%notifydc); + \%pending,\%notifydc,\%status,\%unauthorized,\%currqueued); next if ($restricted); } $numchanges ++; @@ -4367,9 +4368,9 @@ sub update_roles { unless ($udom eq $one) { undef($restricted); $restricted = &Apache::lonuserutils::restricted_dom($context,$id,$udom, - $uname,$two,$start,$end,$one,$two,'','',\%process_by, + $uname,$two,$start,$end,$cdom,$cnum,'','',\%process_by, \%instdoms,\%got_role_approvals,\%got_instdoms,\%reject, - \%pending,\%notifydc); + \%pending,\%notifydc,\%status,\%unauthorized,\%currqueued); next if ($restricted); } $numchanges ++; @@ -4399,11 +4400,11 @@ sub update_roles { } } } # End of foreach (keys(%env)) - if (keys(%reject)) { - $r->print(&Apache::lonuserutils::print_roles_rejected($context,\%reject)); + if ((keys(%reject)) || (keys(%unauthorized))) { + $r->print(&Apache::lonuserutils::print_roles_rejected($context,\%reject,\%unauthorized)); } - if (keys(%pending)) { - $r->print(&Apache::lonuserutils::print_roles_queued($context,\%pending,\%notifydc)); + if ((keys(%pending)) || (keys(%currqueued))) { + $r->print(&Apache::lonuserutils::print_roles_queued($context,\%pending,\%notifydc,\%currqueued)); } # Flush the course logs so reverse user roles immediately updated $r->register_cleanup(\&Apache::lonnet::flushcourselogs); @@ -4460,7 +4461,8 @@ sub enroll_single_student { } } my ($startdate,$enddate) = &Apache::lonuserutils::get_dates_from_form(); - my (%got_role_approvals,%got_instdoms,%process_by,%instdoms,%pending,%reject,%notifydc); + my (%got_role_approvals,%got_instdoms,%process_by,%instdoms,%pending,%reject,%notifydc, + %status,%unauthorized,%currqueued); unless ($env{'form.ccdomain'} eq $env{'course.'.$env{'request.course.id'}.'.domain'}) { my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; @@ -4473,12 +4475,12 @@ sub enroll_single_student { if (&Apache::lonuserutils::restricted_dom($context,$id,$env{'form.ccdomain'},$env{'form.ccuname'}, 'st',$startdate,$enddate,$cdom,$cnum,$csec,$credits, \%process_by,\%instdoms,\%got_role_approvals,\%got_instdoms, - \%reject,\%pending,\%notifydc)) { - if (keys(%reject)) { - $r->print(&Apache::lonuserutils::print_roles_rejected($context,\%reject)); + \%reject,\%pending,\%notifydc,\%status,\%unauthorized,\%currqueued)) { + if ((keys(%reject)) || (keys(%unauthorized))) { + $r->print(&Apache::lonuserutils::print_roles_rejected($context,\%reject,\%unauthorized)); } - if (keys(%pending)) { - $r->print(&Apache::lonuserutils::print_roles_queued($context,\%pending,\%notifydc)); + if ((keys(%pending)) || (keys(%currqueued))) { + $r->print(&Apache::lonuserutils::print_roles_queued($context,\%pending,\%notifydc,\%currqueued)); } return; } @@ -4918,7 +4920,7 @@ sub handler { if (&Apache::lonnet::auto_run($cnum,$cdom) && (($permission->{'cusr'}) || ($permission->{'view'}))) { push(@allhelp,'Course_Automated_Enrollment'); } - if ($permission->{'selfenrolladmin'}) { + if (($permission->{'selfenrolladmin'}) || ($permission->{'selfenrollview'})) { push(@allhelp,'Course_Approve_Selfenroll'); } } @@ -5458,8 +5460,9 @@ sub handler { ''.&mt('You do not have permission to modify dates or sections for users').''); } } elsif ($env{'form.action'} eq 'selfenroll') { - if ($permission->{selfenrolladmin}) { - my %currsettings = ( + my %currsettings; + if ($permission->{selfenrolladmin} || $permission->{selfenrollview}) { + %currsettings = ( selfenroll_types => $env{'course.'.$cid.'.internal.selfenroll_types'}, selfenroll_registered => $env{'course.'.$cid.'.internal.selfenroll_registered'}, selfenroll_section => $env{'course.'.$cid.'.internal.selfenroll_section'}, @@ -5475,6 +5478,8 @@ sub handler { default_enrollment_end_date => $env{'course.'.$cid.'.default_enrollment_end_date'}, uniquecode => $env{'course.'.$cid.'.internal.uniquecode'}, ); + } + if ($permission->{selfenrolladmin}) { push(@{$brcrum}, {href => '/adm/createuser?action=selfenroll', text => "Configure Self-enrollment", @@ -5495,6 +5500,16 @@ sub handler { $r->print('
'.
''.&mt('Actions/page:').' '. - &Apache::lonmeta::selectbox('show',$curr->{'show'},undef, + &Apache::lonmeta::selectbox('show',$curr->{'show'},'',undef, (&mt('all'),5,10,20,50,100,1000,10000)). ' | '; my $startform = @@ -7638,14 +7689,10 @@ sub userlogdisplay_navlinks { sub role_display_filter { my ($context,$formname,$cdom,$cnum,$curr,$version,$crstype) = @_; - my $lctype; - if ($context eq 'course') { - $lctype = lc($crstype); - } my $nolink = 1; my $output = ' |
'.
''.&mt('Changes/page:').' '. - &Apache::lonmeta::selectbox('show',$curr->{'show'},undef, + &Apache::lonmeta::selectbox('show',$curr->{'show'},'',undef, (&mt('all'),5,10,20,50,100,1000,10000)). ' | '; my $startform = @@ -7669,7 +7716,7 @@ sub role_display_filter { if ($curr->{'role'} eq 'any') { $output .= ' selected="selected"'; } - $output .= '>'.&mt('Any').''."\n"; + $output .= '>'.&mt('Any').''."\n"; my @roles = &Apache::lonuserutils::roles_by_context($context,1,$crstype); foreach my $role (@roles) { my $plrole; @@ -7690,7 +7737,7 @@ sub role_display_filter { &mt('Context:').' |
' @@ -7746,6 +7805,7 @@ sub rolechg_contexts { domain => 'User Management in domain', selfenroll => 'Self-enrolled', requestcourses => 'Course Request', + ltienroll => 'Enrollment via LTI', ); if ($crstype eq 'Community') { $lt{'createcourse'} = &mt('Community Creation'); @@ -7770,6 +7830,15 @@ sub rolechg_contexts { return %lt; } +sub approval_types { + return &Apache::lonlocal::texthash ( + any => 'Any', + none => 'No approval needed', + user => 'Role recipient approval', + domain => 'Domain coordinator approval', + ); +} + sub print_helpdeskaccess_display { my ($r,$permission,$brcrum) = @_; my $formname = 'helpdeskaccess'; @@ -9906,7 +9975,7 @@ sub update_selfenroll_config { } else { $r->print(&mt('No changes were made to the existing self-enrollment settings in this course.')); } - my $visactions = &cat_visibility(); + my $visactions = &cat_visibility($cdom); my ($cathash,%cattype); my %domconfig = &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom); if (ref($domconfig{'coursecategories'}) eq 'HASH') {