version 1.215, 2007/12/21 14:35:42
|
version 1.217, 2007/12/21 15:33:32
|
Line 597 sub print_user_modification_page {
|
Line 597 sub print_user_modification_page {
|
my $nondc_setsection_code = ''; |
my $nondc_setsection_code = ''; |
my %loaditem; |
my %loaditem; |
|
|
my $groupslist; |
my $groupslist = &Apache::lonuserutils::get_groupslist(); |
my %curr_groups = &Apache::longroup::coursegroups(); |
|
if (%curr_groups) { |
|
$groupslist = join('","',sort(keys(%curr_groups))); |
|
$groupslist = '"'.$groupslist.'"'; |
|
} |
|
|
|
if ($env{'request.role'} =~ m-^dc\./($match_domain)/$-) { |
|
my $dcdom = $1; |
|
$loaditem{'onload'} = "document.cu.coursedesc.value='';"; |
|
my @rolevals = ('st','ta','ep','in','cc'); |
|
my (@crsroles,@grproles); |
|
for (my $i=0; $i<@rolevals; $i++) { |
|
$crsroles[$i]=&Apache::lonnet::plaintext($rolevals[$i],'Course'); |
|
$grproles[$i]=&Apache::lonnet::plaintext($rolevals[$i],'Group'); |
|
} |
|
my $rolevalslist = join('","',@rolevals); |
|
my $crsrolenameslist = join('","',@crsroles); |
|
my $grprolenameslist = join('","',@grproles); |
|
my $pickcrsfirst = '<--'.&mt('Pick course first'); |
|
my $pickgrpfirst = '<--'.&mt('Pick group first'); |
|
$dc_setcourse_code = <<"ENDSCRIPT"; |
|
function setCourse() { |
|
var course = document.cu.dccourse.value; |
|
if (course != "") { |
|
if (document.cu.dcdomain.value != document.cu.origdom.value) { |
|
alert("You must select a course in the current domain"); |
|
return; |
|
} |
|
var userrole = document.cu.role.options[document.cu.role.selectedIndex].value |
|
var section=""; |
|
var numsections = 0; |
|
var newsecs = new Array(); |
|
for (var i=0; i<document.cu.currsec.length; i++) { |
|
if (document.cu.currsec.options[i].selected == true ) { |
|
if (document.cu.currsec.options[i].value != "" && document.cu.currsec.options[i].value != null) { |
|
if (numsections == 0) { |
|
section = document.cu.currsec.options[i].value |
|
numsections = 1; |
|
} |
|
else { |
|
section = section + "," + document.cu.currsec.options[i].value |
|
numsections ++; |
|
} |
|
} |
|
} |
|
} |
|
if (document.cu.newsec.value != "" && document.cu.newsec.value != null) { |
|
if (numsections == 0) { |
|
section = document.cu.newsec.value |
|
} |
|
else { |
|
section = section + "," + document.cu.newsec.value |
|
} |
|
newsecs = document.cu.newsec.value.split(/,/g); |
|
numsections = numsections + newsecs.length; |
|
} |
|
if ((userrole == 'st') && (numsections > 1)) { |
|
alert("In each course, each user may only have one student role at a time. You had selected "+numsections+" sections.\\nPlease modify your selections so they include no more than one section.") |
|
return; |
|
} |
|
for (var j=0; j<newsecs.length; j++) { |
|
if ((newsecs[j] == 'all') || (newsecs[j] == 'none')) { |
|
alert("'"+newsecs[j]+"' may not be used as the name for a section, as it is a reserved word.\\nPlease choose a different section name."); |
|
return; |
|
} |
|
if (document.cu.groups.value != '') { |
|
var groups = document.cu.groups.value.split(/,/g); |
|
for (var k=0; k<groups.length; k++) { |
|
if (newsecs[j] == groups[k]) { |
|
alert("'"+newsecs[j]+"' may not be used as the name for a section, as it is the name of a course group.\\nSection names and group names must be distinct. Please choose a different section name."); |
|
return; |
|
} |
|
} |
|
} |
|
} |
|
if ((userrole == 'cc') && (numsections > 0)) { |
|
alert("Section designations do not apply to Course Coordinator roles.\\nA course coordinator role will be added with access to all sections."); |
|
section = ""; |
|
} |
|
var coursename = "_$dcdom"+"_"+course+"_"+userrole |
|
var numcourse = getIndex(document.cu.dccourse); |
|
if (numcourse == "-1") { |
|
alert("There was a problem with your course selection"); |
|
return |
|
} |
|
else { |
|
document.cu.elements[numcourse].name = "act"+coursename; |
|
var numnewsec = getIndex(document.cu.newsec); |
|
if (numnewsec != "-1") { |
|
document.cu.elements[numnewsec].name = "sec"+coursename; |
|
document.cu.elements[numnewsec].value = section; |
|
} |
|
var numstart = getIndex(document.cu.start); |
|
if (numstart != "-1") { |
|
document.cu.elements[numstart].name = "start"+coursename; |
|
} |
|
var numend = getIndex(document.cu.end); |
|
if (numend != "-1") { |
|
document.cu.elements[numend].name = "end"+coursename |
|
} |
|
} |
|
} |
|
document.cu.submit(); |
|
} |
|
|
|
function getIndex(caller) { |
my $js = &validation_javascript($context,$ccdomain,$pjump_def, |
for (var i=0;i<document.cu.elements.length;i++) { |
$groupslist,$newuser,$formname,\%loaditem); |
if (document.cu.elements[i] == caller) { |
|
return i; |
|
} |
|
} |
|
return -1; |
|
} |
|
ENDSCRIPT |
|
} else { |
|
$nondc_setsection_code = |
|
&Apache::lonuserutils::setsections_javascript('cu',$groupslist); |
|
} |
|
my $js = &user_modification_js($pjump_def,$dc_setcourse_code, |
|
$nondc_setsection_code,$groupslist); |
|
|
|
my ($jsback,$elements) = &crumb_utilities(); |
|
my $javascript_validations; |
|
if ((&Apache::lonnet::allowed('mau',$ccdomain)) || ($uhome eq 'no_host')) { |
|
my ($krbdef,$krbdefdom) = |
|
&Apache::loncommon::get_kerberos_defaults($ccdomain); |
|
$javascript_validations = |
|
&Apache::lonuserutils::javascript_validations('auth',$krbdefdom,undef, |
|
undef,$ccdomain); |
|
} |
|
$js .= "\n". |
|
'<script type="text/javascript">'."\n".$jsback."\n". |
|
$javascript_validations.'</script>'; |
|
my $start_page = |
my $start_page = |
&Apache::loncommon::start_page('User Management', |
&Apache::loncommon::start_page('User Management', |
$js,{'add_entries' => \%loaditem,}); |
$js,{'add_entries' => \%loaditem,}); |
|
my %breadcrumb_text = &singleuser_breadcrumb(); |
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>"javascript:backPage(document.cu)", |
({href=>"javascript:backPage($form)", |
text=>"Create/modify user", |
text=>$breadcrumb_text{'search'}, |
faq=>282,bug=>'Instructor Interface',}); |
faq=>282,bug=>'Instructor Interface',}); |
|
|
if ($env{'form.phase'} eq 'userpicked') { |
if ($env{'form.phase'} eq 'userpicked') { |
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>"javascript:backPage(document.cu,'get_user_info','select')", |
({href=>"javascript:backPage($form,'get_user_info','select')", |
text=>"Select a user", |
text=>$breadcrumb_text{'userpicked'}, |
faq=>282,bug=>'Instructor Interface',}); |
faq=>282,bug=>'Instructor Interface',}); |
} |
} |
&Apache::lonhtmlcommon::add_breadcrumb |
&Apache::lonhtmlcommon::add_breadcrumb |
({href=>"javascript:backPage(document.cu,'$env{'form.phase'}','modify')", |
({href=>"javascript:backPage($form,'$env{'form.phase'}','modify')", |
text=>"Set user role", |
text=>$breadcrumb_text{'modify'}, |
faq=>282,bug=>'Instructor Interface',}); |
faq=>282,bug=>'Instructor Interface',}); |
my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('User Management'); |
my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('User Management'); |
|
|
my $forminfo =<<"ENDFORMINFO"; |
my $forminfo =<<"ENDFORMINFO"; |
<form action="/adm/createuser" method="post" name="cu"> |
<form action="/adm/createuser" method="post" name="$formname"> |
<input type="hidden" name="phase" value="update_user_data" /> |
<input type="hidden" name="phase" value="update_user_data" /> |
<input type="hidden" name="ccuname" value="$ccuname" /> |
<input type="hidden" name="ccuname" value="$ccuname" /> |
<input type="hidden" name="ccdomain" value="$ccdomain" /> |
<input type="hidden" name="ccdomain" value="$ccdomain" /> |
Line 766 ENDFORMINFO
|
Line 637 ENDFORMINFO
|
$inccourses{$1.'_'.$2}=1; |
$inccourses{$1.'_'.$2}=1; |
} |
} |
} |
} |
if ($uhome eq 'no_host') { |
if ($newuser) { |
my $portfolioform; |
my $portfolioform; |
if (&Apache::lonnet::allowed('mpq',$env{'request.role.domain'})) { |
if (&Apache::lonnet::allowed('mpq',$env{'request.role.domain'})) { |
# Current user has quota modification privileges |
# Current user has quota modification privileges |
Line 789 $forminfo
|
Line 660 $forminfo
|
$loginscript |
$loginscript |
</script> |
</script> |
<input type='hidden' name='makeuser' value='1' /> |
<input type='hidden' name='makeuser' value='1' /> |
<h2>$lt{'cnu'} "$ccuname" $lt{'ind'} $ccdomain</h2> |
<h2>$lt{'cnu'} "$ccuname" $lt{'ind'} $ccdomain |
ENDTITLE |
ENDTITLE |
if ($env{'form.action'} eq 'singlestudent') { |
if ($env{'form.action'} eq 'singlestudent') { |
$r->print(' ('.$lt{'ast'}.')'); |
$r->print(' ('.$lt{'ast'}.')'); |
Line 866 ENDAUTH
|
Line 737 ENDAUTH
|
$permission)); |
$permission)); |
} |
} |
$r->print('</div><div class="LC_clear_float_footer"></div>'); |
$r->print('</div><div class="LC_clear_float_footer"></div>'); |
} else { # user already exist- |
} else { # user already exists |
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
'cup' => "Modify existing user: ", |
'cup' => "Modify existing user: ", |
'ens' => "Enroll one student: ", |
'ens' => "Enroll one student: ", |
Line 934 ENDNOPORTPRIV
|
Line 805 ENDNOPORTPRIV
|
} |
} |
} |
} |
$r->print('</div><div class="LC_clear_float_footer"></div>'); |
$r->print('</div><div class="LC_clear_float_footer"></div>'); |
my %rolesdump=&Apache::lonnet::dump('roles',$ccdomain,$ccuname); |
if ($env{'form.action'} ne 'singlestudent') { |
# Build up table of user roles to allow revocation of a role. |
&display_existing_roles($r,$ccuname,$ccdomain,\%inccourses); |
my ($tmp) = keys(%rolesdump); |
} |
unless ($tmp =~ /^(con_lost|error)/i) { |
|
my $now=time; |
|
my %lt=&Apache::lonlocal::texthash( |
|
'rer' => "Existing Roles", |
|
'rev' => "Revoke", |
|
'del' => "Delete", |
|
'ren' => "Re-Enable", |
|
'rol' => "Role", |
|
'ext' => "Extent", |
|
'sta' => "Start", |
|
'end' => "End" |
|
); |
|
my (%roletext,%sortrole,%roleclass,%rolepriv); |
|
foreach my $area (sort { my $a1=join('_',(split('_',$a))[1,0]); |
|
my $b1=join('_',(split('_',$b))[1,0]); |
|
return $a1 cmp $b1; |
|
} keys(%rolesdump)) { |
|
next if ($area =~ /^rolesdef/); |
|
my $envkey=$area; |
|
my $role = $rolesdump{$area}; |
|
my $thisrole=$area; |
|
$area =~ s/\_\w\w$//; |
|
my ($role_code,$role_end_time,$role_start_time) = |
|
split(/_/,$role); |
|
# Is this a custom role? Get role owner and title. |
|
my ($croleudom,$croleuname,$croletitle)= |
|
($role_code=~m{^cr/($match_domain)/($match_username)/(\w+)$}); |
|
my $allowed=0; |
|
my $delallowed=0; |
|
my $sortkey=$role_code; |
|
my $class='Unknown'; |
|
if ($area =~ m{^/($match_domain)/($match_courseid)} ) { |
|
$class='Course'; |
|
my ($coursedom,$coursedir) = ($1,$2); |
|
$sortkey.="\0$coursedom"; |
|
# $1.'_'.$2 is the course id (eg. 103_12345abcef103l3). |
|
my %coursedata= |
|
&Apache::lonnet::coursedescription($1.'_'.$2); |
|
my $carea; |
|
if (defined($coursedata{'description'})) { |
|
$carea=$coursedata{'description'}. |
|
'<br />'.&mt('Domain').': '.$coursedom.(' 'x8). |
|
&Apache::loncommon::syllabuswrapper('Syllabus',$coursedir,$coursedom); |
|
$sortkey.="\0".$coursedata{'description'}; |
|
$class=$coursedata{'type'}; |
|
} else { |
|
$carea=&mt('Unavailable course').': '.$area; |
|
$sortkey.="\0".&mt('Unavailable course').': '.$area; |
|
} |
|
$sortkey.="\0$coursedir"; |
|
$inccourses{$1.'_'.$2}=1; |
|
if ((&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2)) || |
|
(&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) { |
|
$allowed=1; |
|
} |
|
if ((&Apache::lonnet::allowed('dro',$1)) || |
|
(&Apache::lonnet::allowed('dro',$ccdomain))) { |
|
$delallowed=1; |
|
} |
|
# - custom role. Needs more info, too |
|
if ($croletitle) { |
|
if (&Apache::lonnet::allowed('ccr',$1.'/'.$2)) { |
|
$allowed=1; |
|
$thisrole.='.'.$role_code; |
|
} |
|
} |
|
# Compute the background color based on $area |
|
if ($area=~m{^/($match_domain)/($match_courseid)/(\w+)}) { |
|
$carea.='<br />Section: '.$3; |
|
$sortkey.="\0$3"; |
|
} |
|
$area=$carea; |
|
} else { |
|
$sortkey.="\0".$area; |
|
# Determine if current user is able to revoke privileges |
|
if ($area=~m{^/($match_domain)/}) { |
|
if ((&Apache::lonnet::allowed('c'.$role_code,$1)) || |
|
(&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) { |
|
$allowed=1; |
|
} |
|
if (((&Apache::lonnet::allowed('dro',$1)) || |
|
(&Apache::lonnet::allowed('dro',$ccdomain))) && |
|
($role_code ne 'dc')) { |
|
$delallowed=1; |
|
} |
|
} else { |
|
if (&Apache::lonnet::allowed('c'.$role_code,'/')) { |
|
$allowed=1; |
|
} |
|
} |
|
if ($role_code eq 'ca' || $role_code eq 'au') { |
|
$class='Construction Space'; |
|
} elsif ($role_code eq 'su') { |
|
$class='System'; |
|
} else { |
|
$class='Domain'; |
|
} |
|
} |
|
if (($role_code eq 'ca') || ($role_code eq 'aa')) { |
|
$area=~m{/($match_domain)/($match_username)}; |
|
if (&Apache::lonuserutils::authorpriv($2,$1)) { |
|
$allowed=1; |
|
} else { |
|
$allowed=0; |
|
} |
|
} |
|
my $row = ''; |
|
$row.= '<td>'; |
|
my $active=1; |
|
$active=0 if (($role_end_time) && ($now>$role_end_time)); |
|
if (($active) && ($allowed)) { |
|
$row.= '<input type="checkbox" name="rev:'.$thisrole.'" />'; |
|
} else { |
|
if ($active) { |
|
$row.=' '; |
|
} else { |
|
$row.=&mt('expired or revoked'); |
|
} |
|
} |
|
$row.='</td><td>'; |
|
if ($allowed && !$active) { |
|
$row.= '<input type="checkbox" name="ren:'.$thisrole.'" />'; |
|
} else { |
|
$row.=' '; |
|
} |
|
$row.='</td><td>'; |
|
if ($delallowed) { |
|
$row.= '<input type="checkbox" name="del:'.$thisrole.'" />'; |
|
} else { |
|
$row.=' '; |
|
} |
|
my $plaintext=''; |
|
if (!$croletitle) { |
|
$plaintext=&Apache::lonnet::plaintext($role_code,$class) |
|
} else { |
|
$plaintext= |
|
"Customrole '$croletitle'<br />defined by $croleuname\@$croleudom"; |
|
} |
|
$row.= '</td><td>'.$plaintext. |
|
'</td><td>'.$area. |
|
'</td><td>'.($role_start_time?localtime($role_start_time) |
|
: ' ' ). |
|
'</td><td>'.($role_end_time ?localtime($role_end_time) |
|
: ' ' ) |
|
."</td>"; |
|
$sortrole{$sortkey}=$envkey; |
|
$roletext{$envkey}=$row; |
|
$roleclass{$envkey}=$class; |
|
$rolepriv{$envkey}=$allowed; |
|
#$r->print($row); |
|
} # end of foreach (table building loop) |
|
my $rolesdisplay = 0; |
|
my %output = (); |
|
foreach my $type ('Construction Space','Course','Group','Domain','System','Unknown') { |
|
$output{$type} = ''; |
|
foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) { |
|
if ( ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/ ) && ($rolepriv{$sortrole{$which}}) ) { |
|
$output{$type}.= |
|
&Apache::loncommon::start_data_table_row(). |
|
$roletext{$sortrole{$which}}. |
|
&Apache::loncommon::end_data_table_row(); |
|
} |
|
} |
|
unless($output{$type} eq '') { |
|
$output{$type} = '<tr class="LC_info_row">'. |
|
"<td align='center' colspan='7'>".&mt($type)."</td></tr>". |
|
$output{$type}; |
|
$rolesdisplay = 1; |
|
} |
|
} |
|
if ($rolesdisplay == 1) { |
|
$r->print(' |
|
<h3>'.$lt{'rer'}.'</h3>'. |
|
&Apache::loncommon::start_data_table("LC_createuser"). |
|
&Apache::loncommon::start_data_table_header_row(). |
|
'<th>'.$lt{'rev'}.'</th><th>'.$lt{'ren'}.'</th><th>'.$lt{'del'}. |
|
'</th><th>'.$lt{'rol'}.'</th><th>'.$lt{'ext'}. |
|
'</th><th>'.$lt{'sta'}.'</th><th>'.$lt{'end'}.'</th>'. |
|
&Apache::loncommon::end_data_table_header_row()); |
|
foreach my $type ('Construction Space','Course','Group','Domain','System','Unknown') { |
|
if ($output{$type}) { |
|
$r->print($output{$type}."\n"); |
|
} |
|
} |
|
$r->print(&Apache::loncommon::end_data_table()); |
|
} |
|
} # End of unless |
|
} ## End of new user/old user logic |
} ## End of new user/old user logic |
my $addrolesdisplay = 0; |
my $addrolesdisplay = 0; |
$r->print('<h3>'.&mt('Add Roles').'</h3>'); |
$r->print('<h3>'.&mt('Add Roles').'</h3>'); |
Line 1291 sub date_sections_select {
|
Line 975 sub date_sections_select {
|
return $output; |
return $output; |
} |
} |
|
|
|
sub validation_javascript { |
|
my ($context,$ccdomain,$pjump_def,$groupslist,$newuser,$formname, |
|
$loaditem) = @_; |
|
my $dc_setcourse_code = ''; |
|
my $nondc_setsection_code = ''; |
|
if ($context eq 'domain') { |
|
my $dcdom = $env{'request.role.domain'}; |
|
$loaditem->{'onload'} = "document.cu.coursedesc.value='';"; |
|
$dc_setcourse_code = &Apache::lonuserutils::dc_setcourse_js('cu','singleuser'); |
|
} else { |
|
$nondc_setsection_code = |
|
&Apache::lonuserutils::setsections_javascript($formname,$groupslist); |
|
} |
|
my $js = &user_modification_js($pjump_def,$dc_setcourse_code, |
|
$nondc_setsection_code,$groupslist); |
|
|
|
my ($jsback,$elements) = &crumb_utilities(); |
|
my $javascript_validations; |
|
if ((&Apache::lonnet::allowed('mau',$ccdomain)) || ($newuser)) { |
|
my ($krbdef,$krbdefdom) = |
|
&Apache::loncommon::get_kerberos_defaults($ccdomain); |
|
$javascript_validations = |
|
&Apache::lonuserutils::javascript_validations('createuser',$krbdefdom,undef, |
|
undef,$ccdomain); |
|
} |
|
$js .= "\n". |
|
'<script type="text/javascript">'."\n".$jsback."\n". |
|
$javascript_validations.'</script>'; |
|
return $js; |
|
} |
|
|
|
sub display_existing_roles { |
|
my ($r,$ccuname,$ccdomain,$inccourses) = @_; |
|
my %rolesdump=&Apache::lonnet::dump('roles',$ccdomain,$ccuname); |
|
# Build up table of user roles to allow revocation and re-enabling of roles. |
|
my ($tmp) = keys(%rolesdump); |
|
if ($tmp !~ /^(con_lost|error)/i) { |
|
my $now=time; |
|
my %lt=&Apache::lonlocal::texthash( |
|
'rer' => "Existing Roles", |
|
'rev' => "Revoke", |
|
'del' => "Delete", |
|
'ren' => "Re-Enable", |
|
'rol' => "Role", |
|
'ext' => "Extent", |
|
'sta' => "Start", |
|
'end' => "End", |
|
); |
|
my (%roletext,%sortrole,%roleclass,%rolepriv); |
|
foreach my $area (sort { my $a1=join('_',(split('_',$a))[1,0]); |
|
my $b1=join('_',(split('_',$b))[1,0]); |
|
return $a1 cmp $b1; |
|
} keys(%rolesdump)) { |
|
next if ($area =~ /^rolesdef/); |
|
my $envkey=$area; |
|
my $role = $rolesdump{$area}; |
|
my $thisrole=$area; |
|
$area =~ s/\_\w\w$//; |
|
my ($role_code,$role_end_time,$role_start_time) = |
|
split(/_/,$role); |
|
# Is this a custom role? Get role owner and title. |
|
my ($croleudom,$croleuname,$croletitle)= |
|
($role_code=~m{^cr/($match_domain)/($match_username)/(\w+)$}); |
|
my $allowed=0; |
|
my $delallowed=0; |
|
my $sortkey=$role_code; |
|
my $class='Unknown'; |
|
if ($area =~ m{^/($match_domain)/($match_courseid)} ) { |
|
$class='Course'; |
|
my ($coursedom,$coursedir) = ($1,$2); |
|
$sortkey.="\0$coursedom"; |
|
# $1.'_'.$2 is the course id (eg. 103_12345abcef103l3). |
|
my %coursedata= |
|
&Apache::lonnet::coursedescription($1.'_'.$2); |
|
my $carea; |
|
if (defined($coursedata{'description'})) { |
|
$carea=$coursedata{'description'}. |
|
'<br />'.&mt('Domain').': '.$coursedom.(' 'x8). |
|
&Apache::loncommon::syllabuswrapper('Syllabus',$coursedir,$coursedom); |
|
$sortkey.="\0".$coursedata{'description'}; |
|
$class=$coursedata{'type'}; |
|
} else { |
|
$carea=&mt('Unavailable course').': '.$area; |
|
$sortkey.="\0".&mt('Unavailable course').': '.$area; |
|
} |
|
$sortkey.="\0$coursedir"; |
|
$inccourses->{$1.'_'.$2}=1; |
|
if ((&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2)) || |
|
(&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) { |
|
$allowed=1; |
|
} |
|
if ((&Apache::lonnet::allowed('dro',$1)) || |
|
(&Apache::lonnet::allowed('dro',$ccdomain))) { |
|
$delallowed=1; |
|
} |
|
# - custom role. Needs more info, too |
|
if ($croletitle) { |
|
if (&Apache::lonnet::allowed('ccr',$1.'/'.$2)) { |
|
$allowed=1; |
|
$thisrole.='.'.$role_code; |
|
} |
|
} |
|
# Compute the background color based on $area |
|
if ($area=~m{^/($match_domain)/($match_courseid)/(\w+)}) { |
|
$carea.='<br />Section: '.$3; |
|
$sortkey.="\0$3"; |
|
if (!$allowed) { |
|
if ($env{'request.course.sec'} eq $3) { |
|
if (&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2.'/'.$3)) { |
|
$allowed = 1; |
|
} |
|
} |
|
} |
|
} |
|
$area=$carea; |
|
} else { |
|
$sortkey.="\0".$area; |
|
# Determine if current user is able to revoke privileges |
|
if ($area=~m{^/($match_domain)/}) { |
|
if ((&Apache::lonnet::allowed('c'.$role_code,$1)) || |
|
(&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) { |
|
$allowed=1; |
|
} |
|
if (((&Apache::lonnet::allowed('dro',$1)) || |
|
(&Apache::lonnet::allowed('dro',$ccdomain))) && |
|
($role_code ne 'dc')) { |
|
$delallowed=1; |
|
} |
|
} else { |
|
if (&Apache::lonnet::allowed('c'.$role_code,'/')) { |
|
$allowed=1; |
|
} |
|
} |
|
if ($role_code eq 'ca' || $role_code eq 'au') { |
|
$class='Construction Space'; |
|
} elsif ($role_code eq 'su') { |
|
$class='System'; |
|
} else { |
|
$class='Domain'; |
|
} |
|
} |
|
if (($role_code eq 'ca') || ($role_code eq 'aa')) { |
|
$area=~m{/($match_domain)/($match_username)}; |
|
if (&Apache::lonuserutils::authorpriv($2,$1)) { |
|
$allowed=1; |
|
} else { |
|
$allowed=0; |
|
} |
|
} |
|
my $row = ''; |
|
$row.= '<td>'; |
|
my $active=1; |
|
$active=0 if (($role_end_time) && ($now>$role_end_time)); |
|
if (($active) && ($allowed)) { |
|
$row.= '<input type="checkbox" name="rev:'.$thisrole.'" />'; |
|
} else { |
|
if ($active) { |
|
$row.=' '; |
|
} else { |
|
$row.=&mt('expired or revoked'); |
|
} |
|
} |
|
$row.='</td><td>'; |
|
if ($allowed && !$active) { |
|
$row.= '<input type="checkbox" name="ren:'.$thisrole.'" />'; |
|
} else { |
|
$row.=' '; |
|
} |
|
$row.='</td><td>'; |
|
if ($delallowed) { |
|
$row.= '<input type="checkbox" name="del:'.$thisrole.'" />'; |
|
} else { |
|
$row.=' '; |
|
} |
|
my $plaintext=''; |
|
if (!$croletitle) { |
|
$plaintext=&Apache::lonnet::plaintext($role_code,$class) |
|
} else { |
|
$plaintext= |
|
"Customrole '$croletitle'<br />defined by $croleuname\@$croleudom"; |
|
} |
|
$row.= '</td><td>'.$plaintext. |
|
'</td><td>'.$area. |
|
'</td><td>'.($role_start_time?localtime($role_start_time) |
|
: ' ' ). |
|
'</td><td>'.($role_end_time ?localtime($role_end_time) |
|
: ' ' ) |
|
."</td>"; |
|
$sortrole{$sortkey}=$envkey; |
|
$roletext{$envkey}=$row; |
|
$roleclass{$envkey}=$class; |
|
$rolepriv{$envkey}=$allowed; |
|
#$r->print($row); |
|
} # end of foreach (table building loop) |
|
my $rolesdisplay = 0; |
|
my %output = (); |
|
foreach my $type ('Construction Space','Course','Group','Domain','System','Unknown') { |
|
$output{$type} = ''; |
|
foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) { |
|
if ( ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/ ) && ($rolepriv{$sortrole{$which}}) ) { |
|
$output{$type}.= |
|
&Apache::loncommon::start_data_table_row(). |
|
$roletext{$sortrole{$which}}. |
|
&Apache::loncommon::end_data_table_row(); |
|
} |
|
} |
|
unless($output{$type} eq '') { |
|
$output{$type} = '<tr class="LC_info_row">'. |
|
"<td align='center' colspan='7'>".&mt($type)."</td></tr>". |
|
$output{$type}; |
|
$rolesdisplay = 1; |
|
} |
|
} |
|
if ($rolesdisplay == 1) { |
|
$r->print(' |
|
<h3>'.$lt{'rer'}.'</h3>'. |
|
&Apache::loncommon::start_data_table("LC_createuser"). |
|
&Apache::loncommon::start_data_table_header_row(). |
|
'<th>'.$lt{'rev'}.'</th><th>'.$lt{'ren'}.'</th><th>'.$lt{'del'}. |
|
'</th><th>'.$lt{'rol'}.'</th><th>'.$lt{'ext'}. |
|
'</th><th>'.$lt{'sta'}.'</th><th>'.$lt{'end'}.'</th>'. |
|
&Apache::loncommon::end_data_table_header_row()); |
|
foreach my $type ('Construction Space','Course','Group','Domain','System','Unknown') { |
|
if ($output{$type}) { |
|
$r->print($output{$type}."\n"); |
|
} |
|
} |
|
$r->print(&Apache::loncommon::end_data_table()); |
|
} |
|
} # End of check for keys in rolesdump |
|
return; |
|
} |
|
|
sub user_authentication { |
sub user_authentication { |
my ($ccuname,$ccdomain,$krbdefdom,$abv_auth) = @_; |
my ($ccuname,$ccdomain,$krbdefdom,$abv_auth) = @_; |
my $currentauth=&Apache::lonnet::queryauthenticate($ccuname,$ccdomain); |
my $currentauth=&Apache::lonnet::queryauthenticate($ccuname,$ccdomain); |