version 1.183.2.1, 2020/10/15 13:47:45
|
version 1.215, 2023/08/01 07:48:21
|
Line 50 use strict;
|
Line 50 use strict;
|
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::loncommon(); |
use Apache::loncommon(); |
use Apache::lonhtmlcommon; |
use Apache::lonhtmlcommon; |
|
use Apache::loncoursequeueadmin; |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::longroup; |
use Apache::longroup; |
use HTML::Entities; |
use HTML::Entities; |
Line 153 sub modifyuserrole {
|
Line 154 sub modifyuserrole {
|
return ($userresult,$authresult,$roleresult,$idresult); |
return ($userresult,$authresult,$roleresult,$idresult); |
} |
} |
|
|
|
sub role_approval { |
|
my ($dom,$context,$process_by,$notifydc) = @_; |
|
if (ref($process_by) eq 'HASH') { |
|
my %domconfig = &Apache::lonnet::get_dom('configuration',['privacy'],$dom); |
|
if (ref($domconfig{'privacy'}) eq 'HASH') { |
|
if (ref($notifydc) eq 'ARRAY') { |
|
if ($domconfig{'privacy'}{'notify'} ne '') { |
|
@{$notifydc} = split(/,/,$domconfig{'privacy'}{'notify'}); |
|
} |
|
} |
|
if (ref($domconfig{'privacy'}{'approval'}) eq 'HASH') { |
|
my %approvalconf = %{$domconfig{'privacy'}{'approval'}}; |
|
foreach my $key ('instdom','extdom') { |
|
if (ref($approvalconf{$key}) eq 'HASH') { |
|
if (keys(%{$approvalconf{$key}})) { |
|
$process_by->{$key} = $approvalconf{$key}{$context}; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
|
sub get_instdoms { |
|
my ($udom,$instdoms) = @_; |
|
return unless (ref($instdoms) eq 'ARRAY'); |
|
my @intdoms; |
|
my %iphost = &Apache::lonnet::get_iphost(); |
|
my $primary_id = &Apache::lonnet::domain($udom,'primary'); |
|
my $primary_ip = &Apache::lonnet::get_host_ip($primary_id); |
|
if (ref($iphost{$primary_ip}) eq 'ARRAY') { |
|
foreach my $id (@{$iphost{$primary_ip}}) { |
|
my $intdom = &Apache::lonnet::internet_dom($id); |
|
unless(grep(/^\Q$intdom\E$/,@intdoms)) { |
|
push(@intdoms,$intdom); |
|
} |
|
} |
|
} |
|
foreach my $ip (keys(%iphost)) { |
|
if (ref($iphost{$ip}) eq 'ARRAY') { |
|
foreach my $id (@{$iphost{$ip}}) { |
|
my $location = &Apache::lonnet::internet_dom($id); |
|
if ($location) { |
|
if (grep(/^\Q$location\E$/,@intdoms)) { |
|
my $dom = &Apache::lonnet::host_domain($id); |
|
unless (grep(/^\Q$dom\E/,@{$instdoms})) { |
|
push(@{$instdoms},$dom); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
|
sub restricted_dom { |
|
my ($context,$key,$udom,$uname,$role,$start,$end,$cdom,$cnum,$csec,$credits, |
|
$process_by,$instdoms,$got_role_approvals,$got_instdoms,$reject,$pending, |
|
$notifydc,$status,$unauthorized,$currqueued) = @_; |
|
return if ($udom eq $cdom); |
|
return unless ((ref($process_by) eq 'HASH') && (ref($instdoms) eq 'HASH') && |
|
(ref($got_role_approvals) eq 'HASH') && (ref($got_instdoms) eq 'HASH') && |
|
(ref($reject) eq 'HASH') && (ref($pending) eq 'HASH') && |
|
(ref($notifydc) eq 'HASH') && (ref($status) eq 'HASH') && |
|
(ref($unauthorized) eq 'HASH') && (ref($currqueued) eq 'HASH')); |
|
my (%approval,@notify,$gotdata,$skip); |
|
if (ref($got_role_approvals->{$context}) eq 'HASH') { |
|
if ($got_role_approvals->{$context}{$udom}) { |
|
$gotdata = 1; |
|
if (ref($process_by->{$context}{$udom}) eq 'HASH') { |
|
%approval = %{$process_by->{$context}{$udom}}; |
|
} |
|
} |
|
} |
|
unless ($gotdata) { |
|
&role_approval($udom,$context,\%approval,\@notify); |
|
$process_by->{$context} = { |
|
$udom => \%approval, |
|
}; |
|
$got_role_approvals->{$context} = { |
|
$udom => 1, |
|
}; |
|
$notifydc->{$udom} = \@notify; |
|
} |
|
if (ref($process_by->{$context}) eq 'HASH') { |
|
if (ref($process_by->{$context}{$udom}) eq 'HASH') { |
|
my @inst; |
|
if ($got_instdoms->{$udom}) { |
|
if (ref($instdoms->{$udom}) eq 'ARRAY') { |
|
@inst = @{$instdoms->{$udom}}; |
|
} |
|
} else { |
|
&get_instdoms(\@inst); |
|
$instdoms->{$udom} = \@inst; |
|
$got_instdoms->{$udom} = 1; |
|
} |
|
if (grep(/^\Q$cdom\E$/,@inst)) { |
|
if (exists($approval{'instdom'})) { |
|
my $rule = $approval{'instdom'}; |
|
if (($rule eq 'none') || ($rule eq 'user') || ($rule eq 'domain')) { |
|
my ($id,$currstatus,$curradj) = &get_othdomreq_status($key,$uname,$udom,$role,$cdom,$cnum,$csec); |
|
if (($currstatus ne '') && ($curradj eq $rule)) { |
|
$status->{$key}->{$uname.':'.$udom} = $currstatus; |
|
} |
|
if ($rule eq 'none') { |
|
$reject->{$key}->{$uname.':'.$udom} = { |
|
cdom => $cdom, |
|
cnum => $cnum, |
|
csec => $csec, |
|
udom => $udom, |
|
uname => $uname, |
|
role => $role, |
|
}; |
|
$skip = 1; |
|
} elsif (($rule eq 'user') || ($rule eq 'domain')) { |
|
if ($curradj eq $rule) { |
|
unless ($currstatus eq 'approved') { |
|
if ($currstatus eq 'rejected') { |
|
$unauthorized->{$key}->{$uname.':'.$udom} = { |
|
cdom => $cdom, |
|
cnum => $cnum, |
|
csec => $csec, |
|
udom => $udom, |
|
uname => $uname, |
|
role => $role, |
|
}; |
|
} elsif ($currstatus eq 'pending') { |
|
$currqueued->{$key}->{$uname.':'.$udom} = { |
|
cdom => $cdom, |
|
cnum => $cnum, |
|
csec => $csec, |
|
udom => $udom, |
|
uname => $uname, |
|
role => $role, |
|
adj => $rule, |
|
}; |
|
} |
|
$skip = 1; |
|
} |
|
} else { |
|
$pending->{$key}->{$uname.':'.$udom} = { |
|
cdom => $cdom, |
|
cnum => $cnum, |
|
csec => $csec, |
|
udom => $udom, |
|
uname => $uname, |
|
role => $role, |
|
start => $start, |
|
end => $end, |
|
adj => $rule, |
|
}; |
|
if (($role eq 'st') && ($credits ne '')) { |
|
$pending->{$key}->{$uname.':'.$udom}->{'credits'} = $credits; |
|
} |
|
$skip = 1; |
|
} |
|
} |
|
} |
|
} |
|
} elsif (exists($approval{'extdom'})) { |
|
my $rule = $approval{'extdom'}; |
|
if (($rule eq 'none') || ($rule eq 'user') || ($rule eq 'domain')) { |
|
my ($id,$currstatus,$curradj) = &get_othdomreq_status($key,$uname,$udom,$role,$cdom,$cnum,$csec); |
|
if (($currstatus ne '') && ($curradj eq $rule)) { |
|
$status->{$key}->{$uname.':'.$udom} = $currstatus; |
|
} |
|
if ($rule eq 'none') { |
|
$reject->{$key}->{$uname.':'.$udom} = { |
|
cdom => $cdom, |
|
cnum => $cnum, |
|
csec => $csec, |
|
udom => $udom, |
|
uname => $uname, |
|
role => $role, |
|
}; |
|
$skip = 1; |
|
} elsif (($rule eq 'user') || ($rule eq 'domain')) { |
|
if ($curradj eq $rule) { |
|
unless ($currstatus eq 'approved') { |
|
if ($currstatus eq 'rejected') { |
|
$unauthorized->{$key}->{$uname.':'.$udom} = { |
|
cdom => $cdom, |
|
cnum => $cnum, |
|
csec => $csec, |
|
udom => $udom, |
|
uname => $uname, |
|
role => $role, |
|
}; |
|
} elsif ($currstatus eq 'pending') { |
|
$currqueued->{$key}->{$uname.':'.$udom} = { |
|
cdom => $cdom, |
|
cnum => $cnum, |
|
csec => $csec, |
|
udom => $udom, |
|
uname => $uname, |
|
role => $role, |
|
adj => $rule, |
|
}; |
|
} |
|
$skip = 1; |
|
} |
|
} else { |
|
$pending->{$key}->{$uname.':'.$udom} = { |
|
cdom => $cdom, |
|
cnum => $cnum, |
|
csec => $csec, |
|
udom => $udom, |
|
uname => $uname, |
|
role => $role, |
|
start => $start, |
|
end => $end, |
|
adj => $rule, |
|
}; |
|
if (($role eq 'st') && ($credits ne '')) { |
|
$pending->{$key}->{$uname.':'.$udom}->{'credits'} = $credits; |
|
} |
|
$skip = 1; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return $skip; |
|
} |
|
|
|
sub get_othdomreq_status { |
|
my ($key,$uname,$udom,$role,$cdom,$cnum,$csec) = @_; |
|
my $id = $uname.':'.$udom.':'.$role; |
|
my ($dbnum,$currstatus,$curradj); |
|
if (($role eq 'ca') || ($role eq 'aa')) { |
|
$dbnum = $cnum; |
|
} elsif ($key eq $cdom.'_'.$role) { |
|
$dbnum = &Apache::lonnet::get_domainconfiguser($cdom); |
|
} else { |
|
$id .= ':'.$csec; |
|
$dbnum = $cnum; |
|
} |
|
my $statusid = 'status&'.$id; |
|
my %curr = &Apache::lonnet::get('nohist_othdomqueued',[$id,$statusid],$cdom,$dbnum); |
|
if (ref($curr{$id}) eq 'HASH') { |
|
$curradj = $curr{$id}{'adj'}; |
|
} |
|
$currstatus = $curr{$statusid}; |
|
return ($id,$currstatus,$curradj); |
|
} |
|
|
|
sub print_roles_rejected { |
|
my ($context,$reject,$unauthorized) = @_; |
|
return unless ((ref($reject) eq 'HASH') || (ref($unauthorized) eq 'HASH')); |
|
my $output; |
|
if (keys(%{$reject}) > 0) { |
|
$output = '<p class="LC_warning">'. |
|
&mt("The following roles could not be assigned because the user is from another domain, and that domain's policies disallow it").'<ul>'; |
|
foreach my $key (sort(keys(%{$reject}))) { |
|
if (ref($reject->{$key}) eq 'HASH') { |
|
foreach my $user (sort(keys(%{$reject->{$key}}))) { |
|
if (ref($reject->{$key}->{$user}) eq 'HASH') { |
|
my ($crstype,$role,$cdom,$cnum,$csec,$title,$plainrole); |
|
$role = $reject->{$key}->{$user}{'role'}; |
|
$cdom = $reject->{$key}->{$user}{'cdom'}; |
|
$cnum = $reject->{$key}->{$user}{'cnum'}; |
|
$csec = $reject->{$key}->{$user}{'csec'}; |
|
if (($context eq 'domain') && ($cnum ne '')) { |
|
if (($role eq 'ca') || ($role eq 'aa')) { |
|
$title = &Apache::loncommon::plainname($cnum,$cdom); |
|
} else { |
|
if (&Apache::lonnet::is_course($cdom,$cnum)) { |
|
my %coursedata = &Apache::lonnet::coursedescription($cdom.'_'.$cnum); |
|
$crstype = $coursedata{'type'}; |
|
$title = $coursedata{'description'}; |
|
} |
|
} |
|
} elsif ($context eq 'course') { |
|
$crstype = &Apache::loncommon::course_type(); |
|
} |
|
my $plainrole = &Apache::lonnet::plaintext($role,$crstype); |
|
$output .= '<li>'.&mt('User: [_1]',$reject->{$key}->{$user}{'uname'}).' | '. |
|
&mt('Domain: [_1]',$reject->{$key}->{$user}{'udom'}).' | '. |
|
&mt('Role: [_1]',$plainrole); |
|
if ($crstype) { |
|
if ($csec ne'') { |
|
$output .= ' | '.&mt('Section: [_1]',$csec); |
|
} |
|
} elsif (($context eq 'domain') && (($role eq 'ca') || ($role eq 'aa'))) { |
|
$output .= ' | '.&mt('Authoring Space belonging to: [_1]',$title); |
|
|
|
} |
|
if (($context eq 'domain') && ($crstype)) { |
|
$output .= ' | '.&mt("$crstype: [_1]",$title); |
|
} |
|
$output .= '</li>'; |
|
} |
|
} |
|
} |
|
} |
|
$output .= '</ul></p>'; |
|
} |
|
if (keys(%{$unauthorized}) > 0) { |
|
$output = '<p class="LC_warning">'. |
|
&mt("The following roles could not be assigned because the user is from another domain, and that domain's policies require approval by the user themselves or by a domain coordinator in that domain, and approval has been withheld.").'<ul>'; |
|
foreach my $key (sort(keys(%{$unauthorized}))) { |
|
if (ref($unauthorized->{$key}) eq 'HASH') { |
|
foreach my $user (sort(keys(%{$unauthorized->{$key}}))) { |
|
if (ref($unauthorized->{$key}->{$user}) eq 'HASH') { |
|
my ($crstype,$role,$cdom,$cnum,$csec,$title,$plainrole); |
|
$role = $unauthorized->{$key}->{$user}{'role'}; |
|
$cdom = $unauthorized->{$key}->{$user}{'cdom'}; |
|
$cnum = $unauthorized->{$key}->{$user}{'cnum'}; |
|
$csec = $unauthorized->{$key}->{$user}{'csec'}; |
|
if (($context eq 'domain') && ($cnum ne '')) { |
|
if (($role eq 'ca') || ($role eq 'aa')) { |
|
$title = &mt('Authoring Space belonging to: [_1]', |
|
&Apache::loncommon::plainname($cnum,$cdom)); |
|
} else { |
|
if (&Apache::lonnet::is_course($cdom,$cnum)) { |
|
my %coursedata = &Apache::lonnet::coursedescription($cdom.'_'.$cnum); |
|
$crstype = $coursedata{'type'}; |
|
$title = &mt("$crstype: [_1]",$coursedata{'description'}); |
|
} |
|
} |
|
} elsif ($context eq 'course') { |
|
$crstype = &Apache::loncommon::course_type(); |
|
} |
|
$plainrole = &Apache::lonnet::plaintext($role,$crstype); |
|
$output .= '<li>'.&mt('User: [_1]',$unauthorized->{$key}->{$user}{'uname'}).' | '. |
|
&mt('Domain: [_1]',$unauthorized->{$key}->{$user}{'udom'}).' | '. |
|
&mt('Role: [_1]',$plainrole); |
|
if ($crstype) { |
|
if ($csec ne'') { |
|
$output .= ' | '.&mt('Section: [_1]',$csec); |
|
} |
|
} |
|
if ($title ne '') { |
|
$output .= ' | '.$title; |
|
} |
|
$output .= '</li>'; |
|
} |
|
} |
|
} |
|
} |
|
$output .= '</ul></p>'; |
|
} |
|
return $output; |
|
} |
|
|
|
sub print_roles_queued { |
|
my ($context,$pending,$notifydc,$currqueued) = @_; |
|
return unless ((ref($pending) eq 'HASH') && (ref($notifydc) eq 'HASH') && |
|
(ref($currqueued) eq 'HASH')); |
|
my $output; |
|
if (keys(%{$pending}) > 0) { |
|
my $now = time; |
|
$output = '<p class="LC_warning">'. |
|
&mt("The following role assignments have been queued because the user is from another domain, and that domain's policies require approval by the user themselves or by a domain coordinator in that domain").'<ul>'; |
|
my (%todom,%touser,%crsqueue,%caqueue,%domqueue); |
|
my $requester = $env{'user.name'}.':'.$env{'user.domain'}; |
|
foreach my $key (sort(keys(%{$pending}))) { |
|
if (ref($pending->{$key}) eq 'HASH') { |
|
foreach my $user (sort(keys(%{$pending->{$key}}))) { |
|
if (ref($pending->{$key}->{$user}) eq 'HASH') { |
|
my $role = $pending->{$key}->{$user}{'role'}; |
|
my $uname = $pending->{$key}->{$user}{'uname'}; |
|
my $udom = $pending->{$key}->{$user}{'udom'}; |
|
my $csec = $pending->{$key}->{$user}{'csec'}; |
|
my $cdom = $pending->{$key}->{$user}{'cdom'}; |
|
my $cnum = $pending->{$key}->{$user}{'cnum'}; |
|
my $adj = $pending->{$key}->{$user}{'adj'}; |
|
my $start = $pending->{$key}->{$user}{'start'}; |
|
my $end = $pending->{$key}->{$user}{'end'}; |
|
my $credits = $pending->{$key}->{$user}{'credits'}; |
|
my $now = time; |
|
my ($crstype,$title,$plainrole,$extent,$id,$status); |
|
if ($context eq 'course') { |
|
$crstype = &Apache::loncommon::course_type(); |
|
$title = $env{'course.'.$env{'request.course.id'}.'.description'}; |
|
} elsif ($context eq 'domain') { |
|
if (&Apache::lonnet::is_course($cdom,$cnum)) { |
|
my %coursedata = &Apache::lonnet::coursedescription($cdom.'_'.$cnum); |
|
$crstype = $coursedata{'type'}; |
|
$title = $coursedata{'description'}; |
|
} elsif (($role eq 'ca') || ($role eq 'aa')) { |
|
$title = &Apache::loncommon::plainname($cnum,$cdom); |
|
} |
|
} |
|
$plainrole = &Apache::lonnet::plaintext($role,$crstype); |
|
$extent = "/$cdom/$cnum"; |
|
$id = $uname.':'.$udom.':'.$role; |
|
if (($context eq 'course') || ($crstype)) { |
|
$id .= ':'.$csec; |
|
} |
|
$output .= '<li>'.&mt('User: [_1]',$uname).' | '. |
|
&mt('Domain: [_1]',$udom).' | '. |
|
&mt('Role: [_1]',$plainrole); |
|
if ($crstype) { |
|
if ($csec ne'') { |
|
$output .= ' | '.&mt('Section: [_1]',$csec); |
|
} |
|
} elsif (($context eq 'domain') && (($role eq 'ca') || ($role eq 'aa'))) { |
|
$output .= ' | '.&mt('Authoring Space belonging to: [_1]',$title); |
|
} |
|
if (($context eq 'domain') && ($crstype)) { |
|
$output .= ' | '.&mt("$crstype: [_1]",$title); |
|
} |
|
if (($crstype) && ($csec ne '')) { |
|
$extent .= "/$csec"; |
|
} |
|
if ($adj eq 'user') { |
|
$output .= '<br />'.&mt('Message sent to user for approval'); |
|
$touser{$uname.':'.$udom}{'pending:'.$extent.':'.$role} = { |
|
timestamp => $now, |
|
requester => $requester, |
|
start => $start, |
|
end => $end, |
|
credits => $credits, |
|
context => $context, |
|
}; |
|
} elsif ($adj eq 'domain') { |
|
$output .= '<br />'.&mt("Message sent to user's domain coordinator for approval"); |
|
$todom{$udom}{'pending:'.$uname.':'.$extent.':'.$role} = { |
|
timestamp => $now, |
|
requester => $requester, |
|
start => $start, |
|
end => $end, |
|
credits => $credits, |
|
context => $context, |
|
}; |
|
} |
|
$output .= '</li>'; |
|
if (($context eq 'course') || ($crstype)) { |
|
$crsqueue{$cdom.'_'.$cnum}{$id} = { |
|
timestamp => $now, |
|
requester => $requester, |
|
adj => $adj, |
|
}; |
|
$crsqueue{$cdom.'_'.$cnum}{'status&'.$id} = 'pending'; |
|
} elsif (($context eq 'author') || |
|
(($context eq 'domain') && (($role eq 'ca') || ($role eq 'aa')))) { |
|
$caqueue{$cnum.':'.$cdom}{$id} = { |
|
timestamp => $now, |
|
requester => $requester, |
|
adj => $adj, |
|
}; |
|
$caqueue{$cnum.':'.$cdom}{'status&'.$id} = 'pending'; |
|
} elsif ($context eq 'domain') { |
|
$domqueue{$id} = { |
|
timestamp => $now, |
|
requester => $requester, |
|
adj => $adj, |
|
}; |
|
$domqueue{'status&'.$id} = 'pending'; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
$output .= '</ul></p>'; |
|
if (keys(%touser)) { |
|
foreach my $key (keys(%touser)) { |
|
my ($uname,$udom) = split(/:/,$key); |
|
if (&Apache::lonnet::put('nohist_queuedrolereqs',$touser{$key},$udom,$uname) eq 'ok') { |
|
my $owndomdesc = &Apache::lonnet::domain($udom); |
|
&Apache::loncoursequeueadmin::send_selfserve_notification($uname.':'.$udom, |
|
'','',$owndomdesc,$now,'othdomroleuser',$requester); |
|
} |
|
} |
|
} |
|
if (keys(%todom)) { |
|
foreach my $dom (keys(%todom)) { |
|
if (ref($todom{$dom}) eq 'HASH') { |
|
my $confname = &Apache::lonnet::get_domainconfiguser($dom); |
|
if (&Apache::lonnet::put('nohist_queuedrolereqs',$todom{$dom},$dom,$confname) eq 'ok') { |
|
if (ref($notifydc->{$dom}) eq 'ARRAY') { |
|
if (@{$notifydc->{$dom}} > 0) { |
|
my $notifylist = join(',',@{$notifydc->{$dom}}); |
|
&Apache::loncoursequeueadmin::send_selfserve_notification($notifylist, |
|
'','','',$now,'othdomroledc',$requester); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if (keys(%crsqueue)) { |
|
foreach my $key (keys(%crsqueue)) { |
|
my ($cdom,$cnum) = split(/_/,$key); |
|
if (ref($crsqueue{$key}) eq 'HASH') { |
|
&Apache::lonnet::put('nohist_othdomqueued',$crsqueue{$key},$cdom,$cnum); |
|
} |
|
} |
|
} |
|
if (keys(%caqueue)) { |
|
foreach my $key (keys(%caqueue)) { |
|
my ($auname,$audom) = split(/:/,$key); |
|
if (ref($caqueue{$key}) eq 'HASH') { |
|
&Apache::lonnet::put('nohist_othdomqueued',$caqueue{$key},$audom,$auname); |
|
} |
|
} |
|
} |
|
if (keys(%domqueue)) { |
|
my $confname = &Apache::lonnet::get_domainconfiguser($env{'request.role.domain'}); |
|
&Apache::lonnet::put('nohist_othdomqueued',\%domqueue,$env{'request.role.domain'},$confname); |
|
} |
|
} |
|
if (keys(%{$currqueued}) > 0) { |
|
$output = '<p class="LC_warning">'. |
|
&mt("The following role assignments were already queued because the user is from another domain, and that domain's policies require approval by the user themselves or by a domain coordinator in that domain").'<ul>'; |
|
my $requester = $env{'user.name'}.':'.$env{'user.domain'}; |
|
foreach my $key (sort(keys(%{$currqueued}))) { |
|
if (ref($currqueued->{$key}) eq 'HASH') { |
|
foreach my $user (sort(keys(%{$currqueued->{$key}}))) { |
|
if (ref($currqueued->{$key}->{$user}) eq 'HASH') { |
|
my $role = $currqueued->{$key}->{$user}{'role'}; |
|
my $csec = $currqueued->{$key}->{$user}{'csec'}; |
|
my $cdom = $currqueued->{$key}->{$user}{'cdom'}; |
|
my $cnum = $currqueued->{$key}->{$user}{'cnum'}; |
|
my ($crstype,$title,$plainrole); |
|
if ($context eq 'course') { |
|
$crstype = &Apache::loncommon::course_type(); |
|
} elsif (($context eq 'domain') && ($cnum ne '')) { |
|
if (($role eq 'ca') || ($role eq 'aa')) { |
|
$title = &mt('Authoring Space belonging to: [_1]', |
|
&Apache::loncommon::plainname($cnum,$cdom)); |
|
} elsif (&Apache::lonnet::is_course($cdom,$cnum)) { |
|
my %coursedata = &Apache::lonnet::coursedescription($cdom.'_'.$cnum); |
|
$crstype = $coursedata{'type'}; |
|
$title = &mt("$crstype: [_1]",$coursedata{'description'}); |
|
} |
|
} |
|
$plainrole = &Apache::lonnet::plaintext($role,$crstype); |
|
$output .= '<li>'.&mt('User: [_1]',$currqueued->{$key}->{$user}{'uname'}).' | '. |
|
&mt('Domain: [_1]',$currqueued->{$key}->{$user}{'udom'}).' | '. |
|
&mt('Role: [_1]',$plainrole); |
|
if ($title ne '') { |
|
$output .= ' | '.$title; |
|
} |
|
if ($crstype) { |
|
if ($csec ne '') { |
|
$output .= ' | '.&mt('Section: [_1]',$csec); |
|
} |
|
} |
|
$output .= '</li>'; |
|
} |
|
} |
|
} |
|
} |
|
$output .= '</ul></p>'; |
|
} |
|
return $output; |
|
} |
|
|
sub propagate_id_change { |
sub propagate_id_change { |
my ($uname,$udom,$user) = @_; |
my ($uname,$udom,$user) = @_; |
my (@types,@roles); |
my (@types,@roles); |
Line 438 sub javascript_validations {
|
Line 993 sub javascript_validations {
|
} elsif ($context eq 'domain') { |
} elsif ($context eq 'domain') { |
$setsection_call = 'setCourse()'; |
$setsection_call = 'setCourse()'; |
$setsections_js = &dc_setcourse_js($param{'formname'},$mode, |
$setsections_js = &dc_setcourse_js($param{'formname'},$mode, |
$context,$showcredits); |
$context,$showcredits,$domain); |
} |
} |
$finish = " var checkSec = $setsection_call\n". |
$finish = " var checkSec = $setsection_call\n". |
" if (checkSec == 'ok') {\n". |
" if (checkSec == 'ok') {\n". |
Line 510 END
|
Line 1065 END
|
"; |
"; |
} elsif ($mode eq 'modifycourse') { |
} elsif ($mode eq 'modifycourse') { |
$auth_checks .= " |
$auth_checks .= " |
if (vf.elements[current.argfield].value == null || vf.elements[current.argfield].value == '') { |
if ((current.argfield !== null) && (current.argfield !== undefined) && (current.argfield !== '') && (vf.elements[current.argfield].value == null || vf.elements[current.argfield].value == '')) { |
"; |
"; |
} |
} |
if ( ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
if ( ($mode eq 'createcourse') || ($mode eq 'modifycourse') ) { |
Line 531 END
|
Line 1086 END
|
/* regexp here to check for non \d \. in credits */ |
/* regexp here to check for non \d \. in credits */ |
END |
END |
} else { |
} else { |
|
my ($numrules,$intargjs) = |
|
&Apache::loncommon::passwd_validation_js('vf.elements[current.argfield].value',$domain); |
$auth_checks .= (<<END); |
$auth_checks .= (<<END); |
foundatype=1; |
foundatype=1; |
if (current.argfield == null || current.argfield == '') { |
if (current.argfield == null || current.argfield == '') { |
|
// The login radiobutton checked does not have an associated textbox |
|
} else if (vf.elements[current.argfield].value == '') { |
var alertmsg = ''; |
var alertmsg = ''; |
switch (current.radiovalue) { |
switch (current.radiovalue) { |
case 'krb': |
case 'krb': |
alertmsg = '$alert{'krb'}'; |
alertmsg = '$alert{'krb'}'; |
break; |
break; |
case 'loc': |
case 'int': |
case 'fsys': |
|
alertmsg = '$alert{'ipass'}'; |
alertmsg = '$alert{'ipass'}'; |
break; |
break; |
case 'fsys': |
case 'fsys': |
|
alertmsg = '$alert{'ipass'}'; |
|
break; |
|
case 'loc': |
alertmsg = ''; |
alertmsg = ''; |
break; |
break; |
|
case 'lti': |
default: |
default: |
alertmsg = ''; |
alertmsg = ''; |
} |
} |
Line 553 END
|
Line 1115 END
|
alert(alertmsg); |
alert(alertmsg); |
return; |
return; |
} |
} |
|
} else if (current.radiovalue == 'int') { |
|
if ($numrules > 0) { |
|
$intargjs |
|
} |
} |
} |
END |
END |
} |
} |
Line 641 END
|
Line 1207 END
|
$section_checks.$authheader; |
$section_checks.$authheader; |
return $result; |
return $result; |
} |
} |
|
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
sub upload_manager_javascript_forward_associate { |
sub upload_manager_javascript_forward_associate { |
Line 898 sub print_upload_manager_footer {
|
Line 1465 sub print_upload_manager_footer {
|
my $krbform = &Apache::loncommon::authform_kerberos(%param); |
my $krbform = &Apache::loncommon::authform_kerberos(%param); |
my $intform = &Apache::loncommon::authform_internal(%param); |
my $intform = &Apache::loncommon::authform_internal(%param); |
my $locform = &Apache::loncommon::authform_local(%param); |
my $locform = &Apache::loncommon::authform_local(%param); |
|
my $ltiform = &Apache::loncommon::authform_lti(%param); |
my $date_table = &date_setting_table(undef,undef,$context,undef, |
my $date_table = &date_setting_table(undef,undef,$context,undef, |
$formname,$permission,$crstype); |
$formname,$permission,$crstype); |
|
|
Line 926 sub print_upload_manager_footer {
|
Line 1494 sub print_upload_manager_footer {
|
&Apache::loncommon::help_open_topic('Auth_Options'). |
&Apache::loncommon::help_open_topic('Auth_Options'). |
"</p>\n"; |
"</p>\n"; |
} |
} |
$Str .= &set_login($defdom,$krbform,$intform,$locform); |
$Str .= &set_login($defdom,$krbform,$intform,$locform,$ltiform); |
|
|
my ($home_server_pick,$numlib) = |
my ($home_server_pick,$numlib) = |
&Apache::loncommon::home_server_form_item($defdom,'lcserver', |
&Apache::loncommon::home_server_form_item($defdom,'lcserver', |
Line 943 sub print_upload_manager_footer {
|
Line 1511 sub print_upload_manager_footer {
|
&Apache::lonhtmlcommon::row_closure(); |
&Apache::lonhtmlcommon::row_closure(); |
} |
} |
|
|
|
my ($trusted,$untrusted); |
|
if ($context eq 'course') { |
|
($trusted,$untrusted) = &Apache::lonnet::trusted_domains('enroll',$defdom); |
|
} elsif ($context eq 'author') { |
|
($trusted,$untrusted) = &Apache::lonnet::trusted_domains('othcoau',$defdom); |
|
} |
$Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain')) |
$Str .= &Apache::lonhtmlcommon::row_title(&mt('Default domain')) |
.&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1) |
.&Apache::loncommon::select_dom_form($defdom,'defaultdomain',undef,1,undef,$trusted,$untrusted) |
.&Apache::lonhtmlcommon::row_closure(); |
.&Apache::lonhtmlcommon::row_closure(); |
|
|
$Str .= &Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates')) |
$Str .= &Apache::lonhtmlcommon::row_title(&mt('Starting and Ending Dates')) |
Line 1121 sub print_upload_manager_form {
|
Line 1695 sub print_upload_manager_form {
|
if (!$env{'form.datatoken'}) { |
if (!$env{'form.datatoken'}) { |
$datatoken=&Apache::loncommon::upfile_store($r); |
$datatoken=&Apache::loncommon::upfile_store($r); |
} else { |
} else { |
$datatoken=$env{'form.datatoken'}; |
$datatoken=&Apache::loncommon::valid_datatoken($env{'form.datatoken'}); |
&Apache::loncommon::load_tmp_file($r); |
if ($datatoken ne '') { |
|
&Apache::loncommon::load_tmp_file($r,$datatoken); |
|
} |
|
} |
|
if ($datatoken eq '') { |
|
$r->print('<p class="LC_error">'.&mt('Error').': '. |
|
&mt('Invalid datatoken').'</p>'); |
|
return 'missingdata'; |
} |
} |
my @records=&Apache::loncommon::upfile_record_sep(); |
my @records=&Apache::loncommon::upfile_record_sep(); |
if($env{'form.noFirstLine'}){ |
if($env{'form.noFirstLine'}){ |
Line 1206 sub print_upload_manager_form {
|
Line 1787 sub print_upload_manager_form {
|
} |
} |
&print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear, |
&print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear, |
$context,$permission,$crstype,$showcredits); |
$context,$permission,$crstype,$showcredits); |
|
return 'ok'; |
} |
} |
|
|
sub setup_date_selectors { |
sub setup_date_selectors { |
Line 1553 sub my_custom_roles {
|
Line 2135 sub my_custom_roles {
|
my %rolehash=&Apache::lonnet::dump('roles',$udom,$uname); |
my %rolehash=&Apache::lonnet::dump('roles',$udom,$uname); |
foreach my $key (keys(%rolehash)) { |
foreach my $key (keys(%rolehash)) { |
if ($key=~/^rolesdef\_(\w+)$/) { |
if ($key=~/^rolesdef\_(\w+)$/) { |
|
my $role = $1; |
if ($crstype eq 'Community') { |
if ($crstype eq 'Community') { |
next if ($rolehash{$key} =~ /bre\&S/); |
next if ($rolehash{$key} =~ /bre\&S/); |
} |
} |
$returnhash{$1}=$1; |
$returnhash{$role}=$role; |
} |
} |
} |
} |
return %returnhash; |
return %returnhash; |
Line 2279 sub build_user_record {
|
Line 2862 sub build_user_record {
|
|
|
sub courses_selector { |
sub courses_selector { |
my ($cdom,$formname) = @_; |
my ($cdom,$formname) = @_; |
my %coursecodes = (); |
|
my %codes = (); |
my %codes = (); |
my @codetitles = (); |
my @codetitles = (); |
my %cat_titles = (); |
my %cat_titles = (); |
Line 2292 sub courses_selector {
|
Line 2874 sub courses_selector {
|
my $jscript = ''; |
my $jscript = ''; |
|
|
my $totcodes = 0; |
my $totcodes = 0; |
$totcodes = |
my $instcats = &Apache::lonnet::get_dom_instcats($cdom); |
&Apache::courseclassifier::retrieve_instcodes(\%coursecodes, |
if (ref($instcats) eq 'HASH') { |
$cdom,$totcodes); |
if ((ref($instcats->{'codetitles'}) eq 'ARRAY') && (ref($instcats->{'codes'}) eq 'HASH') && |
if ($totcodes > 0) { |
(ref($instcats->{'cat_titles'}) eq 'HASH') && (ref($instcats->{'cat_order'}) eq 'HASH')) { |
$format_reply = |
%codes = %{$instcats->{'codes'}}; |
&Apache::lonnet::auto_instcode_format($caller,$cdom,\%coursecodes, |
@codetitles = @{$instcats->{'codetitles'}}; |
\%codes,\@codetitles,\%cat_titles,\%cat_order); |
%cat_titles = %{$instcats->{'cat_titles'}}; |
if ($format_reply eq 'ok') { |
%cat_order = %{$instcats->{'cat_order'}}; |
|
$totcodes = scalar(keys(%codes)); |
my $numtypes = @codetitles; |
my $numtypes = @codetitles; |
&Apache::courseclassifier::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles); |
&Apache::courseclassifier::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles); |
my ($scripttext,$longtitles) = &Apache::courseclassifier::javascript_definitions(\@codetitles,\%idlist,\%idlist_titles,\%idnums,\%cat_titles); |
my ($scripttext,$longtitles) = &Apache::courseclassifier::javascript_definitions(\@codetitles,\%idlist,\%idlist_titles,\%idnums,\%cat_titles); |
Line 2336 function setCourseCat(formname) {
|
Line 2919 function setCourseCat(formname) {
|
} |
} |
courseSet('$codetitles[1]'); |
courseSet('$codetitles[1]'); |
for (var j=0; j<formname.Department.length; j++) { |
for (var j=0; j<formname.Department.length; j++) { |
if (formname.Department.options[j].value == "$env{'form.Department'}") { formname.Department.options[j].selected = true; |
if (formname.Department.options[j].value == "$env{'form.Department'}") { |
|
formname.Department.options[j].selected = true; |
} |
} |
} |
} |
if (formname.Department.options[formname.Department.selectedIndex].value == -1) { |
if (formname.Department.options[formname.Department.selectedIndex].value == -1) { |
Line 2757 END
|
Line 3341 END
|
.'<input type="checkbox" name="userwin" value="1"'.$checkwin.' />'.$lt{'owin'} |
.'<input type="checkbox" name="userwin" value="1"'.$checkwin.' />'.$lt{'owin'} |
.'</label></span></td></tr></table></fieldset></div>'; |
.'</label></span></td></tr></table></fieldset></div>'; |
} |
} |
$output .= "\n".'<br clear="all" />'."\n". |
$output .= "\n".'<div style="padding:0;clear:both;margin:0;border:0"></div>'."\n". |
&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table_header_row(); |
&Apache::loncommon::start_data_table_header_row(); |
if ($mode eq 'autoenroll') { |
if ($mode eq 'autoenroll') { |
Line 3512 END
|
Line 4096 END
|
setSections(formname,'$crstype'); |
setSections(formname,'$crstype'); |
if (seccheck == 'ok') { |
if (seccheck == 'ok') { |
opener.document.$callingform.newsecs.value = formname.sections.value; |
opener.document.$callingform.newsecs.value = formname.sections.value; |
|
} else { |
|
return; |
} |
} |
END |
END |
} else { |
} else { |
Line 4096 sub print_first_users_upload_form {
|
Line 4682 sub print_first_users_upload_form {
|
.&Apache::lonhtmlcommon::end_pick_box(); |
.&Apache::lonhtmlcommon::end_pick_box(); |
|
|
$str .= '<p>' |
$str .= '<p>' |
.'<input type="submit" name="fileupload" value="'.&mt('Next').'"' |
.'<input type="button" name="fileupload" value="'.&mt('Next').'"' |
.' onclick="javascript:checkUpload(this.form);" />' |
.' onclick="javascript:checkUpload(this.form);" />' |
.'</p>'; |
.'</p>'; |
|
|
Line 4107 sub print_first_users_upload_form {
|
Line 4693 sub print_first_users_upload_form {
|
# ================================================= Drop/Add from uploaded file |
# ================================================= Drop/Add from uploaded file |
sub upfile_drop_add { |
sub upfile_drop_add { |
my ($r,$context,$permission,$showcredits) = @_; |
my ($r,$context,$permission,$showcredits) = @_; |
&Apache::loncommon::load_tmp_file($r); |
my $datatoken = &Apache::loncommon::valid_datatoken($env{'form.datatoken'}); |
|
if ($datatoken ne '') { |
|
&Apache::loncommon::load_tmp_file($r,$datatoken); |
|
} |
my @userdata=&Apache::loncommon::upfile_record_sep(); |
my @userdata=&Apache::loncommon::upfile_record_sep(); |
if($env{'form.noFirstLine'}){shift(@userdata);} |
if($env{'form.noFirstLine'}){shift(@userdata);} |
my @keyfields = split(/\,/,$env{'form.keyfields'}); |
my @keyfields = split(/\,/,$env{'form.keyfields'}); |
Line 4121 sub upfile_drop_add {
|
Line 4710 sub upfile_drop_add {
|
$fields{$env{'form.f'.$i}}=$keyfields[$i]; |
$fields{$env{'form.f'.$i}}=$keyfields[$i]; |
} |
} |
} |
} |
if ($env{'form.fullup'} ne 'yes') { |
|
$r->print('<form name="studentform" method="post" action="/adm/createuser">'."\n". |
|
'<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'); |
|
} |
|
# |
# |
# Store the field choices away |
# Store the field choices away |
my @storefields = qw/username names fname mname lname gen id |
my @storefields = qw/username names fname mname lname gen id |
Line 4138 sub upfile_drop_add {
|
Line 4723 sub upfile_drop_add {
|
$fieldstype{$field.'_choice'} = 'scalar'; |
$fieldstype{$field.'_choice'} = 'scalar'; |
} |
} |
&Apache::loncommon::store_course_settings('enrollment_upload',\%fieldstype); |
&Apache::loncommon::store_course_settings('enrollment_upload',\%fieldstype); |
my ($cid,$crstype,$setting); |
my ($cid,$crstype,$setting,$crsdom,$crsnum); |
if ($context eq 'domain') { |
if ($context eq 'domain') { |
$setting = $env{'form.roleaction'}; |
$setting = $env{'form.roleaction'}; |
} |
} |
if ($env{'request.course.id'} ne '') { |
if ($env{'request.course.id'} ne '') { |
$cid = $env{'request.course.id'}; |
$cid = $env{'request.course.id'}; |
$crstype = &Apache::loncommon::course_type(); |
$crstype = &Apache::loncommon::course_type(); |
|
$crsdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
$crsnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
} elsif ($setting eq 'course') { |
} elsif ($setting eq 'course') { |
if (&Apache::lonnet::is_course($env{'form.dcdomain'},$env{'form.dccourse'})) { |
if (&Apache::lonnet::is_course($env{'form.dcdomain'},$env{'form.dccourse'})) { |
$cid = $env{'form.dcdomain'}.'_'.$env{'form.dccourse'}; |
$cid = $env{'form.dcdomain'}.'_'.$env{'form.dccourse'}; |
$crstype = &Apache::loncommon::course_type($cid); |
$crstype = &Apache::loncommon::course_type($cid); |
|
$crsdom = $env{'form.dcdomain'}; |
|
$crsnum = $env{'form.dccourse'}; |
} |
} |
} |
} |
my ($startdate,$enddate) = &get_dates_from_form(); |
my ($startdate,$enddate) = &get_dates_from_form(); |
Line 4159 sub upfile_drop_add {
|
Line 4748 sub upfile_drop_add {
|
my $defdom=$env{'request.role.domain'}; |
my $defdom=$env{'request.role.domain'}; |
my $domain; |
my $domain; |
if ($env{'form.defaultdomain'} ne '') { |
if ($env{'form.defaultdomain'} ne '') { |
$domain = $env{'form.defaultdomain'}; |
if (($context eq 'course') || ($setting eq 'course')) { |
|
if ($env{'form.defaultdomain'} eq $crsdom) { |
|
$domain = $env{'form.defaultdomain'}; |
|
} else { |
|
if (&Apache::lonnet::will_trust('enroll',$crsdom,$env{'form.defaultdomain'})) { |
|
$domain = $env{'form.defaultdomain'}; |
|
} else { |
|
$r->print('<span class="LC_error">'.&mt('Error').': '. |
|
&mt('Enrollment of users not permitted for specified default domain: [_1].', |
|
&Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>'); |
|
return 'untrusted'; |
|
} |
|
} |
|
} elsif ($context eq 'author') { |
|
if ($env{'form.defaultdomain'} eq $defdom) { |
|
$domain = $env{'form.defaultdomain'}; |
|
} else { |
|
if ((&Apache::lonnet::will_trust('othcoau',$defdom,$env{'form.defaultdomain'})) && |
|
(&Apache::lonnet::will_trust('coaurem',$env{'form.defaultdomain'},$defdom))) { |
|
$domain = $env{'form.defaultdomain'}; |
|
} else { |
|
$r->print('<span class="LC_error">'.&mt('Error').': '. |
|
&mt('Addition of users not permitted for specified default domain: [_1].', |
|
&Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>'); |
|
return 'untrusted'; |
|
} |
|
} |
|
} elsif (($context eq 'domain') && ($setting eq 'domain')) { |
|
if ($env{'form.defaultdomain'} eq $defdom) { |
|
$domain = $env{'form.defaultdomain'}; |
|
} else { |
|
if (&Apache::lonnet::will_trust('domroles',$defdom,$env{'form.defaultdomain'})) { |
|
$domain = $env{'form.defaultdomain'}; |
|
} else { |
|
$r->print('<span class="LC_error">'.&mt('Error').': '. |
|
&mt('Addition of users not permitted for specified default domain: [_1].', |
|
&Apache::lonnet::domain($env{'form.defaultdomain'},'description')).'</span>'); |
|
return 'untrusted'; |
|
} |
|
} |
|
} |
} else { |
} else { |
$domain = $defdom; |
$domain = $defdom; |
} |
} |
Line 4169 sub upfile_drop_add {
|
Line 4798 sub upfile_drop_add {
|
} else { |
} else { |
my %home_servers = &Apache::lonnet::get_servers($defdom,'library'); |
my %home_servers = &Apache::lonnet::get_servers($defdom,'library'); |
if (! exists($home_servers{$desiredhost})) { |
if (! exists($home_servers{$desiredhost})) { |
$r->print('<span class="LC_error">'.&mt('Error'). |
$r->print('<p class="LC_error">'.&mt('Error').': '. |
&mt('Invalid home server specified').'</span>'); |
&mt('Invalid home server specified').'</p>'); |
$r->print(&Apache::loncommon::end_page()); |
return 'invalidhome'; |
return; |
|
} |
} |
} |
} |
# Determine authentication mechanism |
# Determine authentication mechanism |
Line 4182 sub upfile_drop_add {
|
Line 4810 sub upfile_drop_add {
|
} |
} |
my $amode = ''; |
my $amode = ''; |
my $genpwd = ''; |
my $genpwd = ''; |
|
my @genpwdfail; |
if ($env{'form.login'} eq 'krb') { |
if ($env{'form.login'} eq 'krb') { |
$amode='krb'; |
$amode='krb'; |
$amode.=$env{'form.krbver'}; |
$amode.=$env{'form.krbver'}; |
Line 4190 sub upfile_drop_add {
|
Line 4819 sub upfile_drop_add {
|
$amode='internal'; |
$amode='internal'; |
if ((defined($env{'form.intarg'})) && ($env{'form.intarg'})) { |
if ((defined($env{'form.intarg'})) && ($env{'form.intarg'})) { |
$genpwd=$env{'form.intarg'}; |
$genpwd=$env{'form.intarg'}; |
|
@genpwdfail = |
|
&Apache::loncommon::check_passwd_rules($domain,$genpwd); |
} |
} |
} elsif ($env{'form.login'} eq 'loc') { |
} elsif ($env{'form.login'} eq 'loc') { |
$amode='localauth'; |
$amode='localauth'; |
if ((defined($env{'form.locarg'})) && ($env{'form.locarg'})) { |
if ((defined($env{'form.locarg'})) && ($env{'form.locarg'})) { |
$genpwd=$env{'form.locarg'}; |
$genpwd=$env{'form.locarg'}; |
} |
} |
|
} elsif ($env{'form.login'} eq 'lti') { |
|
$amode='lti'; |
} |
} |
if ($amode =~ /^krb/) { |
if ($amode =~ /^krb/) { |
if (! defined($genpwd) || $genpwd eq '') { |
if (! defined($genpwd) || $genpwd eq '') { |
Line 4268 sub upfile_drop_add {
|
Line 4901 sub upfile_drop_add {
|
\@statuses,\@poss_roles); |
\@statuses,\@poss_roles); |
&gather_userinfo($context,'view',\%userlist,$indexhash,\%info, |
&gather_userinfo($context,'view',\%userlist,$indexhash,\%info, |
\%cstr_roles,$permission); |
\%cstr_roles,$permission); |
|
|
} |
} |
} |
} |
} |
} |
|
if ($datatoken eq '') { |
|
$r->print('<p class="LC_error">'.&mt('Error').': '. |
|
&mt('Invalid datatoken').'</p>'); |
|
return 'missingdata'; |
|
} |
if ( $domain eq &LONCAPA::clean_domain($domain) |
if ( $domain eq &LONCAPA::clean_domain($domain) |
&& ($amode ne '')) { |
&& ($amode ne '')) { |
####################################### |
####################################### |
Line 4285 sub upfile_drop_add {
|
Line 4922 sub upfile_drop_add {
|
$r->print('<h3>'.&mt('Adding/Modifying Users')."</h3>\n<p>\n"); |
$r->print('<h3>'.&mt('Adding/Modifying Users')."</h3>\n<p>\n"); |
} |
} |
$r->rflush; |
$r->rflush; |
|
my (%got_role_approvals,%got_instdoms,%process_by,%instdoms, |
|
%pending,%reject,%notifydc,%status,%unauthorized,%currqueued); |
|
|
my %counts = ( |
my %counts = ( |
user => 0, |
user => 0, |
Line 4341 sub upfile_drop_add {
|
Line 4980 sub upfile_drop_add {
|
my $newuserdom = $env{'request.role.domain'}; |
my $newuserdom = $env{'request.role.domain'}; |
map { $cancreate{$_} = &can_create_user($newuserdom,$context,$_); } keys(%longtypes); |
map { $cancreate{$_} = &can_create_user($newuserdom,$context,$_); } keys(%longtypes); |
# Get new users list |
# Get new users list |
my (%existinguser,%userinfo,%disallow,%rulematch,%inst_results,%alerts,%checkuname); |
my (%existinguser,%userinfo,%disallow,%rulematch,%inst_results,%alerts,%checkuname, |
|
%showpasswdrules,$haspasswdmap); |
my $counter = -1; |
my $counter = -1; |
|
my (%willtrust,%trustchecked); |
foreach my $line (@userdata) { |
foreach my $line (@userdata) { |
$counter ++; |
$counter ++; |
my @secs; |
my @secs; |
Line 4390 sub upfile_drop_add {
|
Line 5031 sub upfile_drop_add {
|
'"<b>'.$entries{$fields{'domain'}}.'</b>"', |
'"<b>'.$entries{$fields{'domain'}}.'</b>"', |
$fname,$mname,$lname,$gen); |
$fname,$mname,$lname,$gen); |
next; |
next; |
|
} elsif ($entries{$fields{'domain'}} ne $domain) { |
|
my $possdom = $entries{$fields{'domain'}}; |
|
if ($context eq 'course' || $setting eq 'course') { |
|
unless ($trustchecked{$possdom}) { |
|
$willtrust{$possdom} = &Apache::lonnet::will_trust('enroll',$domain,$possdom); |
|
$trustchecked{$possdom} = 1; |
|
} |
|
} elsif ($context eq 'author') { |
|
unless ($trustchecked{$possdom}) { |
|
$willtrust{$possdom} = &Apache::lonnet::will_trust('othcoau',$domain,$possdom); |
|
} |
|
if ($willtrust{$possdom}) { |
|
$willtrust{$possdom} = &Apache::lonnet::will_trust('coaurem',$possdom,$domain); |
|
} |
|
} |
|
unless ($willtrust{$possdom}) { |
|
$disallow{$counter} = |
|
&mt('Unacceptable domain [_1] for user [_2] [_3] [_4] [_5]', |
|
'"<b>'.$possdom.'</b>"', |
|
$fname,$mname,$lname,$gen); |
|
next; |
|
} |
} |
} |
my $username = $entries{$fields{'username'}}; |
my $username = $entries{$fields{'username'}}; |
my $userdomain = $entries{$fields{'domain'}}; |
my $userdomain = $entries{$fields{'domain'}}; |
Line 4469 sub upfile_drop_add {
|
Line 5132 sub upfile_drop_add {
|
} |
} |
} |
} |
# determine user password |
# determine user password |
my $password = $genpwd; |
my $password; |
|
my $passwdfromfile; |
if (defined($fields{'ipwd'})) { |
if (defined($fields{'ipwd'})) { |
if ($entries{$fields{'ipwd'}}) { |
if ($entries{$fields{'ipwd'}}) { |
$password=$entries{$fields{'ipwd'}}; |
$password=$entries{$fields{'ipwd'}}; |
|
$passwdfromfile = 1; |
|
if ($env{'form.login'} eq 'int') { |
|
my $uhome=&Apache::lonnet::homeserver($username,$userdomain); |
|
if (($uhome eq 'no_host') || ($changeauth)) { |
|
my @brokepwdrules = |
|
&Apache::loncommon::check_passwd_rules($domain,$password); |
|
if (@brokepwdrules) { |
|
$disallow{$counter} = &mt('[_1]: Password included in file for this user did not meet requirements.', |
|
'<b>'.$username.'</b>'); |
|
map { $showpasswdrules{$_} = 1; } @brokepwdrules; |
|
next; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
unless ($passwdfromfile) { |
|
if ($env{'form.login'} eq 'int') { |
|
if (@genpwdfail) { |
|
my $uhome=&Apache::lonnet::homeserver($username,$userdomain); |
|
if (($uhome eq 'no_host') || ($changeauth)) { |
|
$disallow{$counter} = &mt('[_1]: No specific password in file for this user; default password did not meet requirements', |
|
'<b>'.$username.'</b>'); |
|
unless ($haspasswdmap) { |
|
map { $showpasswdrules{$_} = 1; } @genpwdfail; |
|
$haspasswdmap = 1; |
|
} |
|
} |
|
next; |
|
} |
} |
} |
|
$password = $genpwd; |
} |
} |
# determine user role |
# determine user role |
my $role = ''; |
my $role = ''; |
Line 4542 sub upfile_drop_add {
|
Line 5237 sub upfile_drop_add {
|
&mt('The user does not already exist, and you may not create a new user in a different domain.'); |
&mt('The user does not already exist, and you may not create a new user in a different domain.'); |
next; |
next; |
} else { |
} else { |
unless ($password || $env{'form.login'} eq 'loc') { |
unless (($password ne '') || ($env{'form.login'} eq 'loc') || ($env{'form.login'} eq 'lti')) { |
$disallow{$counter} = |
$disallow{$counter} = |
&mt('[_1]: This is a new user but no default password was provided, and the authentication type requires one.', |
&mt('[_1]: This is a new user but no default password was provided, and the authentication type requires one.', |
'<b>'.$username.'</b>'); |
'<b>'.$username.'</b>'); |
Line 4745 sub upfile_drop_add {
|
Line 5440 sub upfile_drop_add {
|
my (%userres,%authres,%roleres,%idres); |
my (%userres,%authres,%roleres,%idres); |
my $singlesec = ''; |
my $singlesec = ''; |
if ($role eq 'st') { |
if ($role eq 'st') { |
|
if (($context eq 'domain') && ($changeauth eq 'Yes') && (!$newuser)) { |
|
if ((&Apache::lonnet::allowed('mau',$userdomain)) && |
|
(&Apache::lonnet::homeserver($username,$userdomain) ne 'no_host')) { |
|
if ((($amode =~ /^krb4|krb5|internal$/) && $password ne '') || |
|
($amode eq 'localauth')) { |
|
$authresult = |
|
&Apache::lonnet::modifyuserauth($userdomain,$username,$amode,$password); |
|
} |
|
} |
|
} |
my $sec; |
my $sec; |
if (ref($userinfo{$i}{'sections'}) eq 'ARRAY') { |
if (ref($userinfo{$i}{'sections'}) eq 'ARRAY') { |
if (@secs > 0) { |
if (@secs > 0) { |
$sec = $secs[0]; |
$sec = $secs[0]; |
} |
} |
} |
} |
|
if ($userdomain ne $env{'request.role.domain'}) { |
|
my $item = "/$crsdom/$crsnum" ; |
|
if ($sec ne '') { |
|
$item .= "/$sec"; |
|
} |
|
$item .= '_st'; |
|
next if (&restricted_dom($context,$item,$userdomain,$username,$role,$startdate, |
|
$enddate,$crsdom,$crsnum,$sec,$credits,\%process_by, |
|
\%instdoms,\%got_role_approvals,\%got_instdoms,\%reject, |
|
\%pending,\%notifydc,\%status,\%unauthorized,\%currqueued)); |
|
} |
&modifystudent($userdomain,$username,$cid,$sec, |
&modifystudent($userdomain,$username,$cid,$sec, |
$desiredhost,$context); |
$desiredhost,$context); |
$roleresult = |
$roleresult = |
Line 4762 sub upfile_drop_add {
|
Line 5478 sub upfile_drop_add {
|
'',$context,$inststatus,$credits); |
'',$context,$inststatus,$credits); |
$userresult = $roleresult; |
$userresult = $roleresult; |
} else { |
} else { |
if ($role ne '') { |
my $possrole; |
|
if ($role ne '') { |
if ($context eq 'course' || $setting eq 'course') { |
if ($context eq 'course' || $setting eq 'course') { |
if ($customroles{$role}) { |
if ($customroles{$role}) { |
$role = 'cr_'.$env{'user.domain'}.'_'. |
$role = 'cr_'.$env{'user.domain'}.'_'. |
$env{'user.name'}.'_'.$role; |
$env{'user.name'}.'_'.$role; |
} |
} |
if (($role ne 'cc') && ($role ne 'co')) { |
$possrole = $role; |
|
if ($possrole =~ /^cr_/) { |
|
$possrole =~ s{_}{/}g; |
|
} |
|
if (($role ne 'cc') && ($role ne 'co')) { |
if (@secs > 1) { |
if (@secs > 1) { |
$multiple = 1; |
$multiple = 1; |
|
my $prefix = "/$crsdom/$crsnum"; |
foreach my $sec (@secs) { |
foreach my $sec (@secs) { |
|
if ($userdomain ne $env{'request.role.domain'}) { |
|
my $item = $prefix; |
|
if ($sec ne '') { |
|
$item .= "/$sec"; |
|
} |
|
$item .= '_'.$possrole; |
|
next if (&restricted_dom($context,$item,$userdomain,$username,$possrole, |
|
$startdate,$enddate,$crsdom,$crsnum,$sec, |
|
$credits,\%process_by,\%instdoms,\%got_role_approvals, |
|
\%got_instdoms,\%reject,\%pending,\%notifydc, |
|
\%status,\%unauthorized,\%currqueued)); |
|
} |
($userres{$sec},$authres{$sec},$roleres{$sec},$idres{$sec}) = |
($userres{$sec},$authres{$sec},$roleres{$sec},$idres{$sec}) = |
&modifyuserrole($context,$setting, |
&modifyuserrole($context,$setting, |
$changeauth,$cid,$userdomain,$username, |
$changeauth,$cid,$userdomain,$username, |
Line 4785 sub upfile_drop_add {
|
Line 5519 sub upfile_drop_add {
|
$singlesec = $secs[0]; |
$singlesec = $secs[0]; |
} |
} |
} |
} |
|
} else { |
|
$possrole = $role; |
} |
} |
} |
} |
if (!$multiple) { |
if (!$multiple) { |
|
if (($userdomain ne $env{'request.role.domain'}) && ($role ne '')) { |
|
my $item = "/$crsdom/$crsnum"; |
|
if ($singlesec ne '') { |
|
$item .= "/$singlesec"; |
|
} |
|
$item .= '_'.$possrole; |
|
next if (&restricted_dom($context,$item,$userdomain,$username,$possrole,$startdate,$enddate, |
|
$crsdom,$crsnum,$singlesec,$credits,\%process_by,\%instdoms, |
|
\%got_role_approvals,\%got_instdoms,\%reject,\%pending,\%notifydc, |
|
\%status,\%unauthorized,\%currqueued)); |
|
} |
($userresult,$authresult,$roleresult,$idresult) = |
($userresult,$authresult,$roleresult,$idresult) = |
&modifyuserrole($context,$setting, |
&modifyuserrole($context,$setting, |
$changeauth,$cid,$userdomain,$username, |
$changeauth,$cid,$userdomain,$username, |
Line 4824 sub upfile_drop_add {
|
Line 5571 sub upfile_drop_add {
|
"</p>\n"); |
"</p>\n"); |
if ($counts{'role'} > 0) { |
if ($counts{'role'} > 0) { |
$r->print("<p>\n". |
$r->print("<p>\n". |
&mt('Roles added for [quant,_1,user].',$counts{'role'}).' '.&mt('If a user is currently logged-in to LON-CAPA, any new roles which are active will be available when the user next logs in.')."</p>\n"); |
&mt('Roles added for [quant,_1,user].',$counts{'role'}).' '. |
|
&mt('If a user is currently logged-in to LON-CAPA, any new roles which are active will be available when the user next logs in.'). |
|
"</p>\n"); |
} else { |
} else { |
$r->print('<p>'.&mt('No roles added').'</p>'); |
$r->print('<p>'.&mt('No roles added').'</p>'); |
} |
} |
Line 4834 sub upfile_drop_add {
|
Line 5583 sub upfile_drop_add {
|
$counts{'auth'})."</p>\n"); |
$counts{'auth'})."</p>\n"); |
} |
} |
$r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules)); |
$r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules)); |
|
$r->print(&passwdrule_alerts($domain,\%showpasswdrules)); |
|
if ((keys(%reject)) || (keys(%unauthorized))) { |
|
$r->print(&print_roles_rejected($context,\%reject,\%unauthorized)); |
|
} |
|
if ((keys(%pending)) || (keys(%currqueued))) { |
|
$r->print(&print_roles_queued($context,\%pending,\%notifydc,\%currqueued)); |
|
} |
##################################### |
##################################### |
# Display list of students to drop # |
# Display list of students to drop # |
##################################### |
##################################### |
Line 4842 sub upfile_drop_add {
|
Line 5598 sub upfile_drop_add {
|
# Get current classlist |
# Get current classlist |
my $classlist = &Apache::loncoursedata::get_classlist(); |
my $classlist = &Apache::loncoursedata::get_classlist(); |
if (! defined($classlist)) { |
if (! defined($classlist)) { |
$r->print('<form name="studentform" method="post" action="/adm/createuser">'. |
$r->print('<p class="LC_info">'. |
'<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'. |
&mt('There are no students with current/future access to the course.'). |
'<p class="LC_info">'.&mt('There are no students with current/future access to the course.').'</p>'. |
'</p>'."\n"); |
'</form>'."\n"); |
|
} elsif (ref($classlist) eq 'HASH') { |
} elsif (ref($classlist) eq 'HASH') { |
# Remove the students we just added from the list of students. |
# Remove the students we just added from the list of students. |
foreach my $line (@userdata) { |
foreach my $line (@userdata) { |
Line 4861 sub upfile_drop_add {
|
Line 5616 sub upfile_drop_add {
|
} |
} |
} |
} |
} # end of unless |
} # end of unless |
if ($env{'form.fullup'} ne 'yes') { |
return 'ok'; |
$r->print('</form>'); |
|
} |
|
} |
} |
|
|
sub print_namespacing_alerts { |
sub print_namespacing_alerts { |
Line 4906 sub print_namespacing_alerts {
|
Line 5659 sub print_namespacing_alerts {
|
} |
} |
} |
} |
|
|
|
sub passwdrule_alerts { |
|
my ($domain,$passwdrules) = @_; |
|
my $warning; |
|
if (ref($passwdrules) eq 'HASH') { |
|
my %showrules = %{$passwdrules}; |
|
if (keys(%showrules)) { |
|
my %passwdconf = &Apache::lonnet::get_passwdconf($domain); |
|
$warning = '<b>'.&mt('Password requirement(s) unmet for one or more users:').'</b><ul>'; |
|
if ($showrules{'min'}) { |
|
my $min = $passwdconf{'min'}; |
|
if ($min eq '') { |
|
$min = $Apache::lonnet::passwdmin; |
|
} |
|
$warning .= '<li>'.&mt('minimum [quant,_1,character]',$min).'</li>'; |
|
} |
|
if ($showrules{'max'}) { |
|
$warning .= '<li>'.&mt('maximum [quant,_1,character]',$passwdconf{'max'}).'</li>'; |
|
} |
|
if ($showrules{'uc'}) { |
|
$warning .= '<li>'.&mt('contain at least one upper case letter').'</li>'; |
|
} |
|
if ($showrules{'lc'}) { |
|
$warning .= '<li>'.&mt('contain at least one lower case letter').'</li>'; |
|
} |
|
if ($showrules{'num'}) { |
|
$warning .= '<li>'.&mt('contain at least one number').'</li>'; |
|
} |
|
if ($showrules{'spec'}) { |
|
$warning .= '<li>'.&mt('contain at least one non-alphanumeric').'</li>'; |
|
} |
|
$warning .= '</ul>'; |
|
} |
|
} |
|
return $warning; |
|
} |
|
|
sub user_change_result { |
sub user_change_result { |
my ($r,$userresult,$authresult,$roleresult,$idresult,$counts,$flushc, |
my ($r,$userresult,$authresult,$roleresult,$idresult,$counts,$flushc, |
$username,$userdomain,$userchg) = @_; |
$username,$userdomain,$userchg) = @_; |
Line 4994 sub update_user_list {
|
Line 5783 sub update_user_list {
|
if ($context eq 'course') { |
if ($context eq 'course') { |
$crstype = &Apache::loncommon::course_type(); |
$crstype = &Apache::loncommon::course_type(); |
} |
} |
my @changelist; |
my (@changelist,%got_role_approvals,%got_instdoms,%process_by,%instdoms, |
|
%pending,%reject,%notifydc,%status,%unauthorized,%currqueued); |
if ($choice eq 'drop') { |
if ($choice eq 'drop') { |
@changelist = &Apache::loncommon::get_env_multiple('form.droplist'); |
@changelist = &Apache::loncommon::get_env_multiple('form.droplist'); |
} else { |
} else { |
Line 5024 sub update_user_list {
|
Line 5814 sub update_user_list {
|
foreach my $item (@changelist) { |
foreach my $item (@changelist) { |
my ($role,$uname,$udom,$cid,$sec,$scope,$result,$type,$locktype, |
my ($role,$uname,$udom,$cid,$sec,$scope,$result,$type,$locktype, |
@sections,$scopestem,$singlesec,$showsecs,$warn_singlesec, |
@sections,$scopestem,$singlesec,$showsecs,$warn_singlesec, |
$nothingtodo,$keepnosection,$credits,$instsec); |
$nothingtodo,$keepnosection,$credits,$instsec,$cdom,$cnum); |
if ($choice eq 'drop') { |
if ($choice eq 'drop') { |
($uname,$udom,$sec) = split(/:/,$item,-1); |
($uname,$udom,$sec) = split(/:/,$item,-1); |
$role = 'st'; |
$role = 'st'; |
Line 5041 sub update_user_list {
|
Line 5831 sub update_user_list {
|
split(/\:/,$item,8); |
split(/\:/,$item,8); |
$instsec = &unescape($instsec); |
$instsec = &unescape($instsec); |
$cid = $env{'request.course.id'}; |
$cid = $env{'request.course.id'}; |
|
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
$cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
$scopestem = '/'.$cid; |
$scopestem = '/'.$cid; |
$scopestem =~s/\_/\//g; |
$scopestem =~s/\_/\//g; |
if ($sec eq '') { |
if ($sec eq '') { |
Line 5051 sub update_user_list {
|
Line 5843 sub update_user_list {
|
} elsif ($context eq 'author') { |
} elsif ($context eq 'author') { |
($uname,$udom,$role) = split(/\:/,$item,-1); |
($uname,$udom,$role) = split(/\:/,$item,-1); |
$scope = '/'.$env{'user.domain'}.'/'.$env{'user.name'}; |
$scope = '/'.$env{'user.domain'}.'/'.$env{'user.name'}; |
|
$cdom = $env{'user.domain'}; |
|
$cnum = $env{'user.name'}; |
} elsif ($context eq 'domain') { |
} elsif ($context eq 'domain') { |
if ($setting eq 'domain') { |
if ($setting eq 'domain') { |
($role,$uname,$udom) = split(/\:/,$item,-1); |
($role,$uname,$udom) = split(/\:/,$item,-1); |
$scope = '/'.$env{'request.role.domain'}.'/'; |
$scope = '/'.$env{'request.role.domain'}.'/'; |
|
$cdom = $env{'request.role.domain'}; |
} elsif ($setting eq 'author') { |
} elsif ($setting eq 'author') { |
($uname,$udom,$role,$scope) = split(/\:/,$item); |
($uname,$udom,$role,$scope) = split(/\:/,$item); |
|
(undef,$cdom,$cnum) = split(/\//,$scope); |
} elsif ($setting eq 'course') { |
} elsif ($setting eq 'course') { |
($uname,$udom,$role,$cid,$sec,$type,$locktype,$credits,$instsec) = |
($uname,$udom,$role,$cid,$sec,$type,$locktype,$credits,$instsec) = |
split(/\:/,$item,9); |
split(/\:/,$item,9); |
|
($cdom,$cnum) = split('_',$cid); |
$instsec = &unescape($instsec); |
$instsec = &unescape($instsec); |
$scope = '/'.$cid; |
$scope = '/'.$cid; |
$scope =~s/\_/\//g; |
$scope =~s/\_/\//g; |
Line 5101 sub update_user_list {
|
Line 5898 sub update_user_list {
|
$start = $startdate; |
$start = $startdate; |
$end = $enddate; |
$end = $enddate; |
} |
} |
|
my $id = $scope.'_'.$role; |
if ($choice eq 'reenable') { |
if ($choice eq 'reenable') { |
|
next if (&restricted_dom($context,$id,$udom,$uname,$role,$now,$end,$cdom,$cnum, |
|
$sec,$credits,\%process_by,\%instdoms,\%got_role_approvals, |
|
\%got_instdoms,\%reject,\%pending,\%notifydc, |
|
\%status,\%unauthorized,\%currqueued)); |
if ($role eq 'st') { |
if ($role eq 'st') { |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context,$credits,$instsec); |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context,$credits,$instsec); |
} else { |
} else { |
Line 5110 sub update_user_list {
|
Line 5912 sub update_user_list {
|
$now,'','',$context); |
$now,'','',$context); |
} |
} |
} elsif ($choice eq 'activate') { |
} elsif ($choice eq 'activate') { |
|
next if (&restricted_dom($context,$id,$udom,$uname,$role,$now,$end,$cdom,$cnum, |
|
$sec,$credits,\%process_by,\%instdoms,\%got_role_approvals, |
|
\%got_instdoms,\%reject,\%pending,\%notifydc, |
|
\%status,\%unauthorized,\%currqueued)); |
if ($role eq 'st') { |
if ($role eq 'st') { |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context,$credits,$instsec); |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context,$credits,$instsec); |
} else { |
} else { |
Line 5117 sub update_user_list {
|
Line 5923 sub update_user_list {
|
$now,'','',$context); |
$now,'','',$context); |
} |
} |
} elsif ($choice eq 'chgdates') { |
} elsif ($choice eq 'chgdates') { |
|
next if (&restricted_dom($context,$id,$udom,$uname,$role,$start,$end,$cdom,$cnum, |
|
$sec,$credits,\%process_by,\%instdoms,\%got_role_approvals, |
|
\%got_instdoms,\%reject,\%pending,\%notifydc, |
|
\%status,\%unauthorized,\%currqueued)); |
if ($role eq 'st') { |
if ($role eq 'st') { |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context,$credits,$instsec); |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context,$credits,$instsec); |
} else { |
} else { |
Line 5326 sub update_user_list {
|
Line 6136 sub update_user_list {
|
$r->print(&make_dates_default($startdate,$enddate,$context,$crstype)); |
$r->print(&make_dates_default($startdate,$enddate,$context,$crstype)); |
} |
} |
} |
} |
|
if ((keys(%reject)) || (keys(%unauthorized))) { |
|
$r->print(&print_roles_rejected($context,\%reject,\%unauthorized)); |
|
} |
|
if ((keys(%pending)) || (keys(%currqueued))) { |
|
$r->print(&print_roles_queued($context,\%pending,\%notifydc,\%currqueued)); |
|
} |
my $linktext = &mt('Display User Lists'); |
my $linktext = &mt('Display User Lists'); |
if ($choice eq 'drop') { |
if ($choice eq 'drop') { |
$linktext = &mt('Display current class roster'); |
$linktext = &mt('Display current class roster'); |
Line 5409 END
|
Line 6225 END
|
} |
} |
|
|
sub set_login { |
sub set_login { |
my ($dom,$authformkrb,$authformint,$authformloc) = @_; |
my ($dom,$authformkrb,$authformint,$authformloc,$authformlti) = @_; |
my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom); |
my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom); |
my $response; |
my $response; |
my ($authnum,%can_assign) = |
my ($authnum,%can_assign) = |
Line 5431 sub set_login {
|
Line 6247 sub set_login {
|
'<td>'.$authformloc.'</td>'. |
'<td>'.$authformloc.'</td>'. |
&Apache::loncommon::end_data_table_row()."\n"; |
&Apache::loncommon::end_data_table_row()."\n"; |
} |
} |
|
if ($can_assign{'lti'}) { |
|
$response .= &Apache::loncommon::start_data_table_row(). |
|
'<td>'.$authformlti.'</td>'. |
|
&Apache::loncommon::end_data_table_row()."\n"; |
|
} |
$response .= &Apache::loncommon::end_data_table(); |
$response .= &Apache::loncommon::end_data_table(); |
} |
} |
return $response; |
return $response; |
Line 5775 sub can_modify_userinfo {
|
Line 6596 sub can_modify_userinfo {
|
return %canmodify; |
return %canmodify; |
} |
} |
|
|
|
sub can_change_internalpass { |
|
my ($uname,$udom,$crstype,$permission) = @_; |
|
my $canchange; |
|
if (&Apache::lonnet::allowed('mau',$udom)) { |
|
$canchange = 1; |
|
} elsif ((ref($permission) eq 'HASH') && ($permission->{'mip'}) && |
|
($udom eq $env{'request.role.domain'})) { |
|
unless ($env{'course.'.$env{'request.course.id'}.'.internal.nopasswdchg'}) { |
|
my ($cnum,$cdom) = &get_course_identity(); |
|
if ((&Apache::lonnet::is_course_owner($cdom,$cnum)) && ($udom eq $env{'user.domain'})) { |
|
my @userstatuses = ('default'); |
|
my %userenv = &Apache::lonnet::userenvironment($udom,$uname,'inststatus'); |
|
if ($userenv{'inststatus'} ne '') { |
|
@userstatuses = split(/:/,$userenv{'inststatus'}); |
|
} |
|
my $noupdate = 1; |
|
my %passwdconf = &Apache::lonnet::get_passwdconf($cdom); |
|
if (ref($passwdconf{'crsownerchg'}) eq 'HASH') { |
|
if (ref($passwdconf{'crsownerchg'}{'for'}) eq 'ARRAY') { |
|
foreach my $status (@userstatuses) { |
|
if (grep(/^\Q$status\E$/,@{$passwdconf{'crsownerchg'}{'for'}})) { |
|
undef($noupdate); |
|
last; |
|
} |
|
} |
|
} |
|
} |
|
if ($noupdate) { |
|
return; |
|
} |
|
my %owned = &Apache::lonnet::courseiddump($cdom,'.',1,'.', |
|
$env{'user.name'}.':'.$env{'user.domain'}, |
|
undef,undef,undef,'.'); |
|
my %roleshash = &Apache::lonnet::get_my_roles($uname,$udom,'userroles', |
|
['active','future']); |
|
foreach my $key (keys(%roleshash)) { |
|
my ($name,$domain,$role) = split(/:/,$key); |
|
if ($role eq 'st') { |
|
next if (($name eq $cnum) && ($domain eq $cdom)); |
|
if ($owned{$domain.'_'.$name}) { |
|
if (ref($owned{$domain.'_'.$name}) eq 'HASH') { |
|
if ($owned{$domain.'_'.$name}{'nopasswdchg'}) { |
|
$noupdate = 1; |
|
last; |
|
} |
|
} |
|
} else { |
|
$noupdate = 1; |
|
last; |
|
} |
|
} else { |
|
$noupdate = 1; |
|
last; |
|
} |
|
} |
|
unless ($noupdate) { |
|
$canchange = 1; |
|
} |
|
} |
|
} |
|
} |
|
return $canchange; |
|
} |
|
|
sub check_usertype { |
sub check_usertype { |
my ($dom,$uname,$rules,$curr_rules,$got_rules) = @_; |
my ($dom,$uname,$rules,$curr_rules,$got_rules) = @_; |
my $usertype; |
my $usertype; |
Line 5897 sub get_permission {
|
Line 6782 sub get_permission {
|
} |
} |
} |
} |
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
my $user = $env{'user.name'}.':'.$env{'user.domain'}; |
my $user; |
|
if (($env{'user.name'} ne '') && ($env{'user.domain'} ne '')) { |
|
$user = $env{'user.name'}.':'.$env{'user.domain'}; |
|
} |
if (($user ne '') && ($env{'course.'.$env{'request.course.id'}.'.internal.courseowner'} eq |
if (($user ne '') && ($env{'course.'.$env{'request.course.id'}.'.internal.courseowner'} eq |
$user)) { |
$user)) { |
$permission{'owner'} = 1; |
$permission{'owner'} = 1; |
|
if (&Apache::lonnet::allowed('mip',$env{'request.course.id'})) { |
|
$permission{'mip'} = 1; |
|
} |
} elsif (($user ne '') && ($env{'course.'.$env{'request.course.id'}.'.internal.co-owners'} ne '')) { |
} elsif (($user ne '') && ($env{'course.'.$env{'request.course.id'}.'.internal.co-owners'} ne '')) { |
if (grep(/^\Q$user\E$/,split(/,/,$env{'course.'.$env{'request.course.id'}.'.internal.co-owners'}))) { |
if (grep(/^\Q$user\E$/,split(/,/,$env{'course.'.$env{'request.course.id'}.'.internal.co-owners'}))) { |
$permission{'co-owner'} = 1; |
$permission{'co-owner'} = 1; |
Line 5937 sub get_permission {
|
Line 6828 sub get_permission {
|
} |
} |
} |
} |
my $allowed = 0; |
my $allowed = 0; |
foreach my $perm (values(%permission)) { |
foreach my $key (keys(%permission)) { |
if ($perm) { $allowed=1; last; } |
next if (($key eq 'owner') || ($key eq 'co-owner')); |
|
if ($permission{$key}) { $allowed=1; last; } |
} |
} |
return (\%permission,$allowed); |
return (\%permission,$allowed); |
} |
} |
Line 5987 sub get_course_identity {
|
Line 6879 sub get_course_identity {
|
} |
} |
|
|
sub dc_setcourse_js { |
sub dc_setcourse_js { |
my ($formname,$mode,$context,$showcredits) = @_; |
my ($formname,$mode,$context,$showcredits,$domain) = @_; |
my ($dc_setcourse_code,$authen_check); |
my ($dc_setcourse_code,$authen_check); |
my $cctext = &Apache::lonnet::plaintext('cc'); |
my $cctext = &Apache::lonnet::plaintext('cc'); |
my $cotext = &Apache::lonnet::plaintext('co'); |
my $cotext = &Apache::lonnet::plaintext('co'); |
Line 5996 sub dc_setcourse_js {
|
Line 6888 sub dc_setcourse_js {
|
if ($mode eq 'upload') { |
if ($mode eq 'upload') { |
$role = 'courserole'; |
$role = 'courserole'; |
} else { |
} else { |
$authen_check = &verify_authen($formname,$context); |
$authen_check = &verify_authen($formname,$context,$domain); |
} |
} |
$dc_setcourse_code = (<<"SCRIPTTOP"); |
$dc_setcourse_code = (<<"SCRIPTTOP"); |
$authen_check |
$authen_check |
Line 6140 ENDSCRIPT
|
Line 7032 ENDSCRIPT
|
} |
} |
|
|
sub verify_authen { |
sub verify_authen { |
my ($formname,$context) = @_; |
my ($formname,$context,$domain) = @_; |
my %alerts = &authcheck_alerts(); |
my %alerts = &authcheck_alerts(); |
my $finish = "return 'ok';"; |
my $finish = "return 'ok';"; |
if ($context eq 'author') { |
if ($context eq 'author') { |
$finish = "document.$formname.submit();"; |
$finish = "document.$formname.submit();"; |
} |
} |
|
my ($numrules,$intargjs) = |
|
&Apache::loncommon::passwd_validation_js('argpicked',$domain); |
my $outcome = <<"ENDSCRIPT"; |
my $outcome = <<"ENDSCRIPT"; |
|
|
function auth_check() { |
function auth_check() { |
Line 6179 function auth_check() {
|
Line 7073 function auth_check() {
|
break; |
break; |
case 'int': |
case 'int': |
alertmsg = '$alerts{'ipass'}'; |
alertmsg = '$alerts{'ipass'}'; |
|
break; |
case 'fsys': |
case 'fsys': |
alertmsg = '$alerts{'ipass'}'; |
alertmsg = '$alerts{'ipass'}'; |
break; |
break; |
Line 6192 function auth_check() {
|
Line 7087 function auth_check() {
|
alert(alertmsg); |
alert(alertmsg); |
return; |
return; |
} |
} |
|
} else if (logintype == 'int') { |
|
var numrules = $numrules; |
|
if (numrules > 0) { |
|
$intargjs |
|
} |
} |
} |
$finish |
$finish |
} |
} |
Line 6343 sub selfenrollment_administration {
|
Line 7243 sub selfenrollment_administration {
|
} |
} |
} |
} |
if ($settings{'internal.selfenrollmgrdc'} ne '') { |
if ($settings{'internal.selfenrollmgrdc'} ne '') { |
my @in_domain = split(/,/,$settings{'internal.selfenrollmgrdc'}); |
@in_domain = split(/,/,$settings{'internal.selfenrollmgrdc'}); |
my @diffs = &Apache::loncommon::compare_arrays(\@in_domain,$possconfigs); |
my @diffs = &Apache::loncommon::compare_arrays(\@in_domain,$possconfigs); |
unless (@diffs) { |
unless (@diffs) { |
return (\@in_course,\@in_domain); |
return (\@in_course,\@in_domain); |