--- loncom/interface/loncreateuser.pm 2016/10/22 17:56:12 1.417
+++ loncom/interface/loncreateuser.pm 2016/11/13 21:09:56 1.423
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Create a user
#
-# $Id: loncreateuser.pm,v 1.417 2016/10/22 17:56:12 raeburn Exp $
+# $Id: loncreateuser.pm,v 1.423 2016/11/13 21:09:56 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -160,7 +160,8 @@ END_SCRIPT
'
'.$lt{'usrt'}.' '."\n".
&Apache::loncommon::start_data_table();
- if (&Apache::lonnet::allowed('mut',$ccdomain)) {
+ if ((&Apache::lonnet::allowed('mut',$ccdomain)) ||
+ (&Apache::lonnet::allowed('udp',$ccdomain))) {
$output .= &build_tools_display($ccuname,$ccdomain,'tools');
}
@@ -267,7 +268,7 @@ sub build_tools_display {
$colspan = ' colspan="2"';
%domconfig =
&Apache::lonnet::get_dom('configuration',['requestcourses'],$ccdomain);
- $isadv = &Apache::lonnet::is_advanced_user($ccuname,$ccdomain);
+ $isadv = &Apache::lonnet::is_advanced_user($ccdomain,$ccuname);
} elsif ($context eq 'requestauthor') {
%userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname,
'requestauthor');
@@ -334,6 +335,7 @@ sub build_tools_display {
' '.$lt{$item}.' '."\n".
' '."\n".
&Apache::loncommon::start_data_table_row()."\n";
+
if (($context eq 'requestcourses') || ($context eq 'requestauthor')) {
my ($curroption,$currlimit);
my $envkey = $context.'.'.$item;
@@ -428,7 +430,9 @@ sub build_tools_display {
}
$output .= ' '.$custom_access.(' 'x4).
$lt{'avai'}.': '.$currdisp.' '."\n".
- &Apache::loncommon::end_data_table_row()."\n".
+ &Apache::loncommon::end_data_table_row()."\n";
+ unless (&Apache::lonnet::allowed('udp',$ccdomain)) {
+ $output .=
&Apache::loncommon::start_data_table_row()."\n".
' '.
$lt{'chse'}.': '.
@@ -437,6 +441,7 @@ sub build_tools_display {
' '.$lt{'uscu'}.' '.$custradio.' '.
&Apache::loncommon::end_data_table_row()."\n";
+ }
}
return $output;
}
@@ -536,7 +541,10 @@ sub domadhocroles {
my $confname = &Apache::lonnet::get_domainconfiguser($env{'request.role.domain'});
my %existing=&Apache::lonnet::dump('roles',$env{'request.role.domain'},
$confname,'rolesdef_');
- my $output;
+ my ($output,$canmodify);
+ if (&Apache::lonnet::allowed('cdh',$env{'request.role.domain'})) {
+ $canmodify = 1;
+ }
if (keys(%existing) > 0) {
my @current;
my $curradhoc = 'adhocroles.'.$env{'request.role.domain'};
@@ -544,6 +552,9 @@ sub domadhocroles {
if ($userenv{$curradhoc}) {
@current = split(/,/,$userenv{$curradhoc});
}
+ if (!$canmodify && !@current) {
+ return;
+ }
my %customroles;
foreach my $key (keys(%existing)) {
if ($key=~/^rolesdef\_(\w+)$/) {
@@ -557,22 +568,28 @@ sub domadhocroles {
&mt('Ad Hoc Course Roles Selectable via Helpdesk Role').
''."\n".
&Apache::loncommon::start_data_table().
- &Apache::loncommon::start_data_table_header_row().
- ''.&mt('Action').' '.&mt('Role').' '.
- ''.&mt('Privileges in Course').' '.
- &Apache::loncommon::end_data_table_header_row();
+ &Apache::loncommon::start_data_table_header_row();
+ if ($canmodify) {
+ $output .= ' '.&mt('Action').' ';
+ }
+ $output .= ''.&mt('Role').' '.
+ ''.&mt('Privileges in Course').' '.
+ &Apache::loncommon::end_data_table_header_row();
foreach my $key (sort(keys(%customroles))) {
+ next if ((!$canmodify) && (!grep(/^\Q$key\E$/,@current)));
$output .= &Apache::loncommon::start_data_table_row();
- if (grep(/^\Q$key\E$/,@current)) {
- $output .= ' '.
- ' '.
- &mt('Delete').' '.
- ' ';
- } else {
- $output .= ''.
- ' '.
- &mt('Add').' '.
- ' ';
+ if ($canmodify) {
+ if (grep(/^\Q$key\E$/,@current)) {
+ $output .= ''.
+ ' '.
+ &mt('Delete').' '.
+ ' ';
+ } else {
+ $output .= ''.
+ ' '.
+ &mt('Add').' '.
+ ' ';
+ }
}
$output .= ''.$key.' ';
foreach my $level ('course','domain','system') {
@@ -740,7 +757,7 @@ sub print_username_entry_form {
} elsif ($env{'form.action'} eq 'accesslogs') {
$helpitem = 'Domain_User_Access_Logs';
}
- my %breadcrumb_text = &singleuser_breadcrumb($crstype);
+ my %breadcrumb_text = &singleuser_breadcrumb($crstype,$context,$defdom);
if ($env{'form.action'} eq 'custom') {
push(@{$brcrum},
{href=>"javascript:backPage(document.crtuser)",
@@ -768,6 +785,7 @@ sub print_username_entry_form {
'srst' => 'Search for a user and enroll as a student',
'srme' => 'Search for a user and enroll as a member',
'srad' => 'Search for a user and modify/add user information or roles',
+ 'srvu' => 'Search for a user and view user information and roles',
'srva' => 'Search for a user and view access log information',
'usr' => "Username",
'dom' => "Domain",
@@ -823,6 +841,9 @@ sub print_username_entry_form {
}
} elsif ($env{'form.action'} eq 'accesslogs') {
$actiontext = $lt{'srva'};
+ } elsif (($env{'form.action'} eq 'singleuser') &&
+ ($context eq 'domain') && (!&Apache::lonnet::allowed('mau',$defdom))) {
+ $actiontext = $lt{'srvu'};
}
$r->print("$actiontext ");
if ($env{'form.origform'} ne 'crtusername') {
@@ -916,7 +937,9 @@ ENDBLOCK
} else {
$output = ''.$userpicker.'
';
}
- if (($env{'form.phase'} eq '') && ($env{'form.action'} ne 'accesslogs')) {
+ if (($env{'form.phase'} eq '') && ($env{'form.action'} ne 'accesslogs') &&
+ (!(($env{'form.action'} eq 'singleuser') && ($context eq 'domain') &&
+ (!&Apache::lonnet::allowed('mau',$env{'request.role.domain'}))))) {
my $defdom=$env{'request.role.domain'};
my $domform = &Apache::loncommon::select_dom_form($defdom,'srchdomain');
my %lt=&Apache::lonlocal::texthash(
@@ -1033,7 +1056,9 @@ ENDSCRIPT
'stusrch' => "User Search to enroll student",
'memsrch' => "User Search to enroll member",
'srcva' => "Search for a user and view access log information",
+ 'usrvu' => "User Search to view user roles",
'usel' => "Select a user to add/modify roles",
+ 'suvr' => "Select a user to view roles",
'stusel' => "Select a user to enroll as a student",
'memsel' => "Select a user to enroll as a member",
'vacsel' => "Select a user to view access log",
@@ -1046,7 +1071,7 @@ ENDSCRIPT
if ($context eq 'requestcrs') {
$r->print('');
} else {
- my %breadcrumb_text = &singleuser_breadcrumb($crstype);
+ my %breadcrumb_text = &singleuser_breadcrumb($crstype,$context,$srch->{'srchdomain'});
my $helpitem;
if ($env{'form.action'} eq 'singleuser') {
$helpitem = 'Course_Change_Privileges';
@@ -1066,9 +1091,19 @@ ENDSCRIPT
);
$r->print(&Apache::loncommon::start_page('User Management',$jscript,{bread_crumbs => $brcrum}));
if ($env{'form.action'} eq 'singleuser') {
- $r->print("
$lt{'usrch'} ");
+ my $readonly;
+ if (($context eq 'domain') && (!&Apache::lonnet::allowed('mau',$srch->{'srchdomain'}))) {
+ $readonly = 1;
+ $r->print("
$lt{'usrvu'} ");
+ } else {
+ $r->print("
$lt{'usrch'} ");
+ }
$r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context,undef,$crstype));
- $r->print('
'.$lt{'usel'}.' ');
+ if ($readonly) {
+ $r->print('
'.$lt{'suvr'}.' ');
+ } else {
+ $r->print('
'.$lt{'usel'}.' ');
+ }
} elsif ($env{'form.action'} eq 'singlestudent') {
$r->print($jscript."
");
if ($crstype eq 'Community') {
@@ -1207,10 +1242,15 @@ sub print_user_modification_page {
}
$response .= ' '
.&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.")
- .' '
- .&mt('Please contact the [_1]helpdesk[_2] for assistance.'
- ,'',' ')
- .'
';
+ .' ';
+ if ($context eq 'domain') {
+ $response .= &mt('Please contact a [_1] for assistance.',
+ &Apache::lonnet::plaintext('dc'));
+ } else {
+ $response .= &mt('Please contact the [_1]helpdesk[_2] for assistance.'
+ ,'
',' ');
+ }
+ $response .= '
';
$env{'form.phase'} = '';
&print_username_entry_form($r,$context,$response,undef,undef,$crstype,$brcrum);
return;
@@ -1257,7 +1297,7 @@ sub print_user_modification_page {
my $js = &validation_javascript($context,$ccdomain,$pjump_def,$crstype,
$groupslist,$newuser,$formname,\%loaditem);
- my %breadcrumb_text = &singleuser_breadcrumb($crstype);
+ my %breadcrumb_text = &singleuser_breadcrumb($crstype,$context,$ccdomain);
my $helpitem = 'Course_Change_Privileges';
if ($env{'form.action'} eq 'singlestudent') {
$helpitem = 'Course_Add_Student';
@@ -1467,14 +1507,20 @@ ENDAUTH
'"'.$ccuname.'"','"'.$ccdomain.'"');
}
} else {
- $title = &mt('Modify existing user: [_1] in domain [_2]',
+ if ($permission->{'cusr'}) {
+ $title = &mt('Modify existing user: [_1] in domain [_2]',
+ '"'.$ccuname.'"','"'.$ccdomain.'"');
+ } else {
+ $title = &mt('Existing user: [_1] in domain [_2]',
'"'.$ccuname.'"','"'.$ccdomain.'"');
+ }
}
$r->print('
'.$title.' '."\n");
$r->print('
');
$r->print(&personal_data_display($ccuname,$ccdomain,$newuser,$context,
$inst_results{$ccuname.':'.$ccdomain}));
- if (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) {
+ if ((&Apache::lonnet::allowed('ccc',$env{'request.role.domain'})) ||
+ (&Apache::lonnet::allowed('udp',$env{'request.role.domain'}))) {
$r->print('
'.&mt('User Can Request Creation of Courses/Communities in this Domain?').' '.
&Apache::loncommon::start_data_table());
if ($env{'request.role.domain'} eq $ccdomain) {
@@ -1489,18 +1535,21 @@ ENDAUTH
my @order = ('auth','quota','tools','requestauthor','adhocroles');
my %user_text;
my ($isadv,$isauthor) =
- &Apache::lonnet::is_advanced_user($ccuname,$ccdomain);
+ &Apache::lonnet::is_advanced_user($ccdomain,$ccuname);
if ((!$isauthor) &&
- (&Apache::lonnet::allowed('cau',$env{'request.role.domain'}))
- && ($env{'request.role.domain'} eq $ccdomain)) {
+ ((&Apache::lonnet::allowed('cau',$env{'request.role.domain'})) ||
+ (&Apache::lonnet::allowed('udp',$env{'request.role.domain'}))) &&
+ ($env{'request.role.domain'} eq $ccdomain)) {
$user_text{'requestauthor'} = &domainrole_req($ccuname,$ccdomain);
}
- if (&Apache::lonnet::allowed('cdh',$env{'request.role.domain'})) {
+ if ((&Apache::lonnet::allowed('cdh',$env{'request.role.domain'})) ||
+ (&Apache::lonnet::allowed('udp',$env{'request.role.domain'}))) {
$user_text{'adhocroles'} = &domadhocroles($ccuname,$ccdomain);
}
$user_text{'auth'} = &user_authentication($ccuname,$ccdomain,$formname);
if ((&Apache::lonnet::allowed('mpq',$ccdomain)) ||
- (&Apache::lonnet::allowed('mut',$ccdomain))) {
+ (&Apache::lonnet::allowed('mut',$ccdomain)) ||
+ (&Apache::lonnet::allowed('udp',$ccdomain))) {
# Current user has quota modification privileges
$user_text{'quota'} = &user_quotas($ccuname,$ccdomain);
}
@@ -1558,9 +1607,18 @@ ENDNOTOOLSPRIV
if ($gotdiv) {
$r->print('');
}
+ my $statuses;
+ if (($context eq 'domain') && (&Apache::lonnet::allowed('udp',$ccdomain)) &&
+ (!&Apache::lonnet::allowed('mau',$ccdomain))) {
+ $statuses = ['active'];
+ } elsif (($context eq 'course') && ((&Apache::lonnet::allowed('vcl',$env{'request.course.id'})) ||
+ ($env{'request.course.sec'} &&
+ &Apache::lonnet::allowed('vcl',$env{'request.course.id'}.'/'.$env{'request.course.sec'})))) {
+ $statuses = ['active'];
+ }
if ($env{'form.action'} ne 'singlestudent') {
&display_existing_roles($r,$ccuname,$ccdomain,\%inccourses,$context,
- $roledom,$crstype);
+ $roledom,$crstype,$showcredits,$statuses);
}
} ## End of new user/old user logic
if ($env{'form.action'} eq 'singlestudent') {
@@ -1571,7 +1629,7 @@ ENDNOTOOLSPRIV
$btntxt = &mt('Enroll Student');
}
$r->print('
'."\n");
- } else {
+ } elsif ($permission->{'cusr'}) {
$r->print('
'.
'
'.&mt('Add Roles').' ');
my $addrolesdisplay = 0;
@@ -1614,7 +1672,7 @@ ENDNOTOOLSPRIV
}
sub singleuser_breadcrumb {
- my ($crstype) = @_;
+ my ($crstype,$context,$domain) = @_;
my %breadcrumb_text;
if ($env{'form.action'} eq 'singlestudent') {
if ($crstype eq 'Community') {
@@ -1622,16 +1680,21 @@ sub singleuser_breadcrumb {
} else {
$breadcrumb_text{'search'} = 'Enroll a student';
}
- $breadcrumb_text{'userpicked'} = 'Select a user',
- $breadcrumb_text{'modify'} = 'Set section/dates',
+ $breadcrumb_text{'userpicked'} = 'Select a user';
+ $breadcrumb_text{'modify'} = 'Set section/dates';
} elsif ($env{'form.action'} eq 'accesslogs') {
$breadcrumb_text{'search'} = 'View access logs for a user';
- $breadcrumb_text{'userpicked'} = 'Select a user',
- $breadcrumb_text{'activity'} = 'Activity',
+ $breadcrumb_text{'userpicked'} = 'Select a user';
+ $breadcrumb_text{'activity'} = 'Activity';
+ } elsif (($env{'form.action'} eq 'singleuser') && ($context eq 'domain') &&
+ (!&Apache::lonnet::allowed('mau',$domain))) {
+ $breadcrumb_text{'search'} = "View user's roles";
+ $breadcrumb_text{'userpicked'} = 'Select a user';
+ $breadcrumb_text{'modify'} = 'User roles';
} else {
$breadcrumb_text{'search'} = 'Create/modify a user';
- $breadcrumb_text{'userpicked'} = 'Select a user',
- $breadcrumb_text{'modify'} = 'Set user role',
+ $breadcrumb_text{'userpicked'} = 'Select a user';
+ $breadcrumb_text{'modify'} = 'Set user role';
}
return %breadcrumb_text;
}
@@ -1701,8 +1764,22 @@ sub validation_javascript {
sub display_existing_roles {
my ($r,$ccuname,$ccdomain,$inccourses,$context,$roledom,$crstype,
- $showcredits) = @_;
+ $showcredits,$statuses) = @_;
my $now=time;
+ my $showall = 1;
+ my ($showexpired,$showactive);
+ if ((ref($statuses) eq 'ARRAY') && (@{$statuses} > 0)) {
+ $showall = 0;
+ if (grep(/^expired$/,@{$statuses})) {
+ $showexpired = 1;
+ }
+ if (grep(/^active$/,@{$statuses})) {
+ $showactive = 1;
+ }
+ if ($showexpired && $showactive) {
+ $showall = 1;
+ }
+ }
my %lt=&Apache::lonlocal::texthash(
'rer' => "Existing Roles",
'rev' => "Revoke",
@@ -1766,6 +1843,13 @@ sub display_existing_roles {
$area =~ s/\_\w\w$//;
my ($role_code,$role_end_time,$role_start_time) =
split(/_/,$role);
+ my $active=1;
+ $active=0 if (($role_end_time) && ($now>$role_end_time));
+ if ($active) {
+ next unless($showall || $showactive);
+ } else {
+ next unless($showall || $showexpired);
+ }
# Is this a custom role? Get role owner and title.
my ($croleudom,$croleuname,$croletitle)=
($role_code=~m{^cr/($match_domain)/($match_username)/(\w+)$});
@@ -1774,11 +1858,13 @@ sub display_existing_roles {
my $sortkey=$role_code;
my $class='Unknown';
my $credits='';
- if ($area =~ m{^/($match_domain)/($match_courseid)} ) {
+ my $csec;
+ if ($area =~ m{^/($match_domain)/($match_courseid)}) {
$class='Course';
my ($coursedom,$coursedir) = ($1,$2);
my $cid = $1.'_'.$2;
# $1.'_'.$2 is the course id (eg. 103_12345abcef103l3).
+ next if ($envkey =~ m{^/$match_domain/$match_courseid/[A-Za-z0-9]+_gr$});
my %coursedata=
&Apache::lonnet::coursedescription($cid);
if ($coursedir =~ /^$match_community$/) {
@@ -1836,12 +1922,13 @@ sub display_existing_roles {
$thisrole.='.'.$role_code;
}
}
- if ($area=~m{^/($match_domain)/($match_courseid)/(\w+)}) {
- $carea.=' '.&mt('Section: [_1]',$3);
- $sortkey.="\0$3";
+ if ($area=~m{^/($match_domain/$match_courseid/(\w+))}) {
+ $csec = $2;
+ $carea.=' '.&mt('Section: [_1]',$csec);
+ $sortkey.="\0$csec";
if (!$allowed) {
- if ($env{'request.course.sec'} eq $3) {
- if (&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2.'/'.$3)) {
+ if ($env{'request.course.sec'} eq $csec) {
+ if (&Apache::lonnet::allowed('c'.$role_code,$1)) {
$allowed = 1;
}
}
@@ -1883,29 +1970,30 @@ sub display_existing_roles {
}
}
my $row = '';
- $row.= '';
- my $active=1;
- $active=0 if (($role_end_time) && ($now>$role_end_time));
- if (($active) && ($allowed)) {
- $row.= ' ';
- } else {
- if ($active) {
- $row.=' ';
+ if ($showall) {
+ $row.= ' ';
+ if (($active) && ($allowed)) {
+ $row.= ' ';
} else {
- $row.=&mt('expired or revoked');
+ if ($active) {
+ $row.=' ';
+ } else {
+ $row.=&mt('expired or revoked');
+ }
}
- }
- $row.=' ';
- if ($allowed && !$active) {
- $row.= ' ';
- } else {
- $row.=' ';
- }
- $row.=' ';
- if ($delallowed) {
- $row.= ' ';
- } else {
- $row.=' ';
+ $row.=' ';
+ if ($allowed && !$active) {
+ $row.= ' ';
+ } else {
+ $row.=' ';
+ }
+ $row.=' ';
+ if ($delallowed) {
+ $row.= ' ';
+ } else {
+ $row.=' ';
+ }
+ $row.= ' ';
}
my $plaintext='';
if (!$croletitle) {
@@ -1923,17 +2011,31 @@ sub display_existing_roles {
' ',
$croleuname.':'.$croleudom);
}
- $row.= ' '.$plaintext.
- ' '.$area.
- ' '.($role_start_time?&Apache::lonlocal::locallocaltime($role_start_time)
- : ' ' ).
- ' '.($role_end_time ?&Apache::lonlocal::locallocaltime($role_end_time)
- : ' ' )
- ." ";
+ $row.= ''.$plaintext.' '.
+ ''.$area.' '.
+ ''.($role_start_time?&Apache::lonlocal::locallocaltime($role_start_time)
+ : ' ' ).' '.
+ ''.($role_end_time ?&Apache::lonlocal::locallocaltime($role_end_time)
+ : ' ' ).' ';
$sortrole{$sortkey}=$envkey;
$roletext{$envkey}=$row;
$roleclass{$envkey}=$class;
- $rolepriv{$envkey}=$allowed;
+ if ($allowed) {
+ $rolepriv{$envkey}='edit';
+ } else {
+ if ($context eq 'domain') {
+ if ((&Apache::lonnet::allowed('vur',$ccdomain)) &&
+ ($envkey=~m{^/$ccdomain/})) {
+ $rolepriv{$envkey}='view';
+ }
+ } elsif ($context eq 'course') {
+ if ((&Apache::lonnet::allowed('vcl',$env{'request.course.id'})) ||
+ ($env{'request.course.sec'} && ($env{'request.course.sec'} eq $csec) &&
+ &Apache::lonnet::allowed('vcl',$env{'request.course.id'}.'/'.$env{'request.course.sec'}))) {
+ $rolepriv{$envkey}='view';
+ }
+ }
+ }
} # end of foreach (table building loop)
my $rolesdisplay = 0;
@@ -1966,15 +2068,28 @@ sub display_existing_roles {
} elsif ($env{'request.role'} =~ /^au\./) {
$contextrole = &mt('Existing Co-Author Roles in your Authoring Space');
} else {
- $contextrole = &mt('Existing Roles in this Domain');
+ if ($showall) {
+ $contextrole = &mt('Existing Roles in this Domain');
+ } elsif ($showactive) {
+ $contextrole = &mt('Unexpired Roles in this Domain');
+ } elsif ($showexpired) {
+ $contextrole = &mt('Expired or Revoked Roles in this Domain');
+ }
}
$r->print(''.
'
'.$contextrole.' '.
&Apache::loncommon::start_data_table("LC_createuser").
-&Apache::loncommon::start_data_table_header_row().
-''.$lt{'rev'}.' '.$lt{'ren'}.' '.$lt{'del'}.
-' '.$lt{'rol'}.' '.$lt{'ext'}.
-' '.$lt{'sta'}.' '.$lt{'end'}.' '.
+&Apache::loncommon::start_data_table_header_row());
+ if ($showall) {
+ $r->print(
+''.$lt{'rev'}.' '.$lt{'ren'}.' '.$lt{'del'}.' '
+ );
+ } elsif ($showexpired) {
+ $r->print(''.$lt{'rev'}.' ');
+ }
+ $r->print(
+''.$lt{'rol'}.' '.$lt{'ext'}.' '.
+''.$lt{'sta'}.' '.$lt{'end'}.' '.
&Apache::loncommon::end_data_table_header_row());
foreach my $type ('Authoring Space','Course','Community','Domain','System','Unknown') {
if ($output{$type}) {
@@ -2112,16 +2227,16 @@ sub user_authentication {
my ($ccuname,$ccdomain,$formname) = @_;
my $currentauth=&Apache::lonnet::queryauthenticate($ccuname,$ccdomain);
my $outcome;
+ my %lt=&Apache::lonlocal::texthash(
+ 'err' => "ERROR",
+ 'uuas' => "This user has an unrecognized authentication scheme",
+ 'adcs' => "Please alert a domain coordinator of this situation",
+ 'sldb' => "Please specify login data below",
+ 'ld' => "Login Data"
+ );
# Check for a bad authentication type
if ($currentauth !~ /^(krb4|krb5|unix|internal|localauth):/) {
# bad authentication scheme
- my %lt=&Apache::lonlocal::texthash(
- 'err' => "ERROR",
- 'uuas' => "This user has an unrecognized authentication scheme",
- 'adcs' => "Please alert a domain coordinator of this situation",
- 'sldb' => "Please specify login data below",
- 'ld' => "Login Data"
- );
if (&Apache::lonnet::allowed('mau',$ccdomain)) {
&initialize_authen_forms($ccdomain,$formname);
@@ -2147,16 +2262,12 @@ $lt{'uuas'} ($currentauth). $lt{'adcs'}.
ENDBADAUTH
}
} else { # Authentication type is valid
+
&initialize_authen_forms($ccdomain,$formname,$currentauth,'modifyuser');
my ($authformcurrent,$can_modify,@authform_others) =
&modify_login_block($ccdomain,$currentauth);
if (&Apache::lonnet::allowed('mau',$ccdomain)) {
# Current user has login modification privileges
- my %lt=&Apache::lonlocal::texthash (
- 'ld' => "Login Data",
- 'ccld' => "Change Current Login Data",
- 'enld' => "Enter New Login Data"
- );
$outcome =
''."\n";
- my %breadcrumb_text = &singleuser_breadcrumb($crstype);
+ my %breadcrumb_text = &singleuser_breadcrumb($crstype,$context,$env{'form.ccdomain'});
push (@{$brcrum},
{href => "javascript:backPage(document.userupdate)",
text => $breadcrumb_text{'search'},
@@ -4628,6 +4765,7 @@ sub handler {
}
} elsif (((($env{'form.action'} eq 'singleuser') || ($env{'form.action'}
eq 'singlestudent')) && ($permission->{'cusr'})) ||
+ (($env{'form.action'} eq 'singleuser') && ($permission->{'view'})) ||
(($env{'form.action'} eq 'accesslogs') && ($permission->{'activity'}))) {
my $phase = $env{'form.phase'};
my @search = ('srchterm','srchby','srchin','srchtype','srchdomain');
@@ -5035,36 +5173,46 @@ sub handler {
''.&mt('You do not have permission to configure self-enrollment').' ');
}
} elsif ($env{'form.action'} eq 'selfenrollqueue') {
- push(@{$brcrum},
- {href => '/adm/createuser?action=selfenrollqueue',
- text => 'Enrollment requests',
- help => 'Course_Self_Enrollment'});
- $bread_crumbs_component = 'Enrollment requests';
- if ($env{'form.state'} eq 'done') {
+ if ($permission->{selfenrolladmin}) {
push(@{$brcrum},
{href => '/adm/createuser?action=selfenrollqueue',
- text => 'Result',
+ text => 'Enrollment requests',
help => 'Course_Self_Enrollment'});
- $bread_crumbs_component = 'Enrollment result';
- }
- $args = { bread_crumbs => $brcrum,
- bread_crumbs_component => $bread_crumbs_component};
- $r->print(&header(undef,$args));
- my $cid = $env{'request.course.id'};
- my $cdom = $env{'course.'.$cid.'.domain'};
- my $cnum = $env{'course.'.$cid.'.num'};
- my $coursedesc = $env{'course.'.$cid.'.description'};
- if (!exists($env{'form.state'})) {
- $r->print(''.&mt('Pending enrollment requests').' '."\n");
- $r->print(&Apache::loncoursequeueadmin::display_queued_requests($context,
- $cdom,$cnum));
- } elsif ($env{'form.state'} eq 'done') {
- $r->print(''.&mt('Enrollment request processing').' '."\n");
- $r->print(&Apache::loncoursequeueadmin::update_request_queue($context,
- $cdom,$cnum,$coursedesc));
+ $bread_crumbs_component = 'Enrollment requests';
+ if ($env{'form.state'} eq 'done') {
+ push(@{$brcrum},
+ {href => '/adm/createuser?action=selfenrollqueue',
+ text => 'Result',
+ help => 'Course_Self_Enrollment'});
+ $bread_crumbs_component = 'Enrollment result';
+ }
+ $args = { bread_crumbs => $brcrum,
+ bread_crumbs_component => $bread_crumbs_component};
+ $r->print(&header(undef,$args));
+ my $cid = $env{'request.course.id'};
+ my $cdom = $env{'course.'.$cid.'.domain'};
+ my $cnum = $env{'course.'.$cid.'.num'};
+ my $coursedesc = $env{'course.'.$cid.'.description'};
+ if (!exists($env{'form.state'})) {
+ $r->print(''.&mt('Pending enrollment requests').' '."\n");
+ $r->print(&Apache::loncoursequeueadmin::display_queued_requests($context,
+ $cdom,$cnum));
+ } elsif ($env{'form.state'} eq 'done') {
+ $r->print(''.&mt('Enrollment request processing').' '."\n");
+ $r->print(&Apache::loncoursequeueadmin::update_request_queue($context,
+ $cdom,$cnum,$coursedesc));
+ }
+ } else {
+ $r->print(&header(undef,{'no_nav_bar' => 1}).
+ ''.&mt('You do not have permission to manage self-enrollment').' ');
}
} elsif ($env{'form.action'} eq 'changelogs') {
- &print_userchangelogs_display($r,$context,$permission,$brcrum);
+ if ($permission->{cusr} || $permission->{view}) {
+ &print_userchangelogs_display($r,$context,$permission,$brcrum);
+ } else {
+ $r->print(&header(undef,{'no_nav_bar' => 1}).
+ ''.&mt('You do not have permission to view change logs').' ');
+ }
} else {
$bread_crumbs_component = 'User Management';
$args = { bread_crumbs => $brcrum,
@@ -5316,6 +5464,27 @@ sub print_main_menu {
listusers => 'Show and manage users in this community.',
},
);
+ if ($linkcontext eq 'domain') {
+ unless ($permission->{'cusr'}) {
+ $links{'domain'}{'singleuser'} = 'View a User';
+ $linktitles{'domain'}{'singleuser'} = 'View information about a user in the domain';
+
+ }
+ } elsif ($linkcontext eq 'course') {
+ unless ($permission->{'cusr'}) {
+ $links{'course'}{'singleuser'} = 'View a Course User';
+ $linktitles{'course'}{'singleuser'} = 'View information about a user in this course';
+ $links{'course'}{'listusers'} = 'List Course Users';
+ $linktitles{'course'}{'listusers'} = 'Show information about users in this course';
+ }
+ } elsif ($linkcontext eq 'community') {
+ unless ($permission->{'cusr'}) {
+ $links{'community'}{'singleuser'} = 'View a Community User';
+ $linktitles{'community'}{'singleuser'} = 'View information about a user in this community';
+ $links{'community'}{'listusers'} = 'List Community Users';
+ $linktitles{'community'}{'listusers'} = 'Show information about users in this community';
+ }
+ }
my @menu = ( {categorytitle => 'Single Users',
items =>
[
@@ -5324,7 +5493,7 @@ sub print_main_menu {
icon => 'edit-redo.png',
#help => 'Course_Change_Privileges',
url => '/adm/createuser?action=singleuser',
- permission => $permission->{'cusr'},
+ permission => ($permission->{'view'} || $permission->{'cusr'}),
linktitle => $linktitles{$linkcontext}{'singleuser'},
},
]},
@@ -5397,7 +5566,7 @@ sub print_main_menu {
icon => 'document-properties.png',
#help => 'Course_User_Logs',
url => '/adm/createuser?action=changelogs',
- permission => $permission->{'cusr'},
+ permission => ($permission->{'cusr'} || $permission->{'view'}),
linktitle => 'View change log.',
},
);
@@ -5477,7 +5646,7 @@ sub print_main_menu {
icon => 'document-properties.png',
#help => 'Course_User_Logs',
url => '/adm/createuser?action=changelogs',
- permission => $permission->{'cusr'},
+ permission => ($permission->{'view'} || $permission->{'cusr'}),
linktitle => 'View change log.',
},
);
@@ -5502,7 +5671,8 @@ sub print_main_menu {
icon => 'roles.png',
#help => 'Course_Automated_Enrollment',
permission => (&Apache::lonnet::auto_run($cnum,$cdom)
- && $permission->{'cusr'}),
+ && (($permission->{'cusr'}) ||
+ ($permission->{'view'}))),
url => '/adm/populate',
linktitle => 'Automated enrollment manager.',
}
@@ -5551,7 +5721,7 @@ sub restore_prev_selections {
}
sub print_selfenroll_menu {
- my ($r,$context,$cid,$cdom,$cnum,$currsettings,$additional) = @_;
+ my ($r,$context,$cid,$cdom,$cnum,$currsettings,$additional,$readonly) = @_;
my $crstype = &Apache::loncommon::course_type();
my $formname = 'selfenroll';
my $nolink = 1;
@@ -5564,6 +5734,10 @@ sub print_selfenroll_menu {
butn => 'but no user types have been checked.',
wilf => "Please uncheck 'activate' or check at least one type.",
);
+ my $disabled;
+ if ($readonly) {
+ $disabled = ' disabled="disabled"';
+ }
&js_escape(\%alerts);
my $selfenroll_js = <<"ENDSCRIPT";
function update_types(caller,num) {
@@ -5879,13 +6053,13 @@ ENDSCRIPT
$output .= ' checked="checked" ';
}
$output .= 'onchange="javascript:update_types('.
- "'selfenroll_all'".');" />'.&mt('Yes').''.
+ "'selfenroll_all'".');"'.$disabled.' />'.&mt('Yes').''.
' '.&mt('No').''.
+ "'selfenroll_all'".');"'.$disabled.' />'.&mt('No').''.
&Apache::loncommon::end_data_table_row().
&Apache::loncommon::end_data_table().
&mt('Or').' '.
@@ -5907,10 +6081,10 @@ ENDSCRIPT
.' '
.' '
+ .'name="selfenroll_delete" value="'.$num.'" onchange="javascript:update_types('."'selfenroll_delete','$num'".');"'.$disabled.' />'
.&mt('Delete').' ';
$output .= ' '.&mt('User types:').' '
- .&selfenroll_inst_types($num,$currdom,\@currinsttypes).' '
+ .&selfenroll_inst_types($num,$currdom,\@currinsttypes,$readonly).''
.&Apache::loncommon::end_data_table_row();
$num ++;
}
@@ -5925,7 +6099,7 @@ ENDSCRIPT
$output .= &Apache::loncommon::start_data_table_row()
.''.$add_domtitle.' '
.&Apache::loncommon::select_dom_form('','selfenroll_newdom',
- $includeempty,$showdomdesc)
+ $includeempty,$showdomdesc,'','','',$readonly)
.' '
.' '.&Apache::loncommon::end_data_table_row()
.&Apache::loncommon::end_data_table();
@@ -5946,15 +6120,15 @@ ENDSCRIPT
}
if ($registered) {
$regon = ' checked="checked" ';
- $regoff = ' ';
+ $regoff = '';
} else {
- $regon = ' ';
+ $regon = '';
$regoff = ' checked="checked" ';
}
$output .= ''.
- ' '.
+ ' '.
&mt('Yes').' '.
- ' '.
+ ' '.
&mt('No').' ';
} elsif ($item eq 'enroll_dates') {
my ($starttime,$endtime);
@@ -5976,10 +6150,10 @@ ENDSCRIPT
}
my $startform =
&Apache::lonhtmlcommon::date_setter($formname,'selfenroll_start_date',$starttime,
- undef,undef,undef,undef,undef,undef,undef,$nolink);
+ $disabled,undef,undef,undef,undef,undef,undef,$nolink);
my $endform =
&Apache::lonhtmlcommon::date_setter($formname,'selfenroll_end_date',$endtime,
- undef,undef,undef,undef,undef,undef,undef,$nolink);
+ $disabled,undef,undef,undef,undef,undef,undef,$nolink);
$output .= &selfenroll_date_forms($startform,$endform);
} elsif ($item eq 'access_dates') {
my ($starttime,$endtime);
@@ -6001,10 +6175,10 @@ ENDSCRIPT
}
my $startform =
&Apache::lonhtmlcommon::date_setter($formname,'selfenroll_start_access',$starttime,
- undef,undef,undef,undef,undef,undef,undef,$nolink);
+ $disabled,undef,undef,undef,undef,undef,undef,$nolink);
my $endform =
&Apache::lonhtmlcommon::date_setter($formname,'selfenroll_end_access',$endtime,
- undef,undef,undef,undef,undef,undef,undef,$nolink);
+ $disabled,undef,undef,undef,undef,undef,undef,$nolink);
$output .= &selfenroll_date_forms($startform,$endform);
} elsif ($item eq 'section') {
my $currsec;
@@ -6028,13 +6202,13 @@ ENDSCRIPT
next;
}
my $sections_select =
- &Apache::lonuserutils::course_sections(\%sections_count,'st',$currsec);
+ &Apache::lonuserutils::course_sections(\%sections_count,'st',$currsec,$disabled);
$output .= ''."\n";
} elsif ($item eq 'approval') {
@@ -6056,8 +6230,8 @@ ENDSCRIPT
for my $i (0..2) {
$output .= ''.
' '.$selfdescs{'approval'}{$i}.
- ' '.(' 'x2);
+ $appchecked{$i}.' onclick="toggleNotify();"'.$disabled.' />'.
+ $selfdescs{'approval'}{$i}.''.(' 'x2);
}
my %advhash = &Apache::lonnet::get_course_adv_roles($cid,1);
my (@ccs,%notified);
@@ -6098,7 +6272,7 @@ ENDSCRIPT
&Apache::loncommon::start_data_table_row()
}
$output .= ''.
- ' '.
+ ' '.
&Apache::loncommon::plainname($ccuname,$ccudom).
' ';
$count ++;
@@ -6148,26 +6322,28 @@ ENDSCRIPT
$nolimit = ' checked="checked" ';
}
$output .= '';
+ ' ';
}
$output .= &Apache::lonhtmlcommon::row_closure(1);
}
}
- $output .= &Apache::lonhtmlcommon::end_pick_box().
- ' '
- .' '
- .' '."\n".
- $additional.'';
+ $output .= &Apache::lonhtmlcommon::end_pick_box().' ';
+ unless ($readonly) {
+ $output .= ' ';
+ }
+ $output .= ' '
+ .' '."\n"
+ .$additional.'';
$r->print($output);
return;
}
@@ -6350,12 +6526,16 @@ sub new_selfenroll_dom_row {
}
sub selfenroll_inst_types {
- my ($num,$currdom,$currinsttypes) = @_;
+ my ($num,$currdom,$currinsttypes,$readonly) = @_;
my $output;
my $numinrow = 4;
my $count = 0;
my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($currdom);
my $othervalue = 'any';
+ my $disabled;
+ if ($readonly) {
+ $disabled = ' disabled="disabled"';
+ }
if ((ref($types) eq 'ARRAY') && (ref($usertypes) eq 'HASH')) {
if (keys(%{$usertypes}) > 0) {
$othervalue = 'other';
@@ -6380,7 +6560,7 @@ sub selfenroll_inst_types {
$output .= 'checked="checked"';
}
}
- $output .= ' name="selfenroll_types_'.$num.'" />'.$usertypes->{$type}.'';
+ $output .= ' name="selfenroll_types_'.$num.'"'.$disabled.' />'.$usertypes->{$type}.'';
}
$count ++;
}
@@ -6403,7 +6583,7 @@ sub selfenroll_inst_types {
} else {
$output .= ' checked="checked"';
}
- $output .= ' name="selfenroll_types_'.$num.'" />'.$othertitle.'';
+ $output .= ' name="selfenroll_types_'.$num.'"'.$disabled.' />'.$othertitle.'';
}
return $output;
}
@@ -6426,7 +6606,7 @@ sub selfenroll_date_forms {
sub print_userchangelogs_display {
my ($r,$context,$permission,$brcrum) = @_;
my $formname = 'rolelog';
- my ($username,$domain,$crstype,%roleslog);
+ my ($username,$domain,$crstype,$viewablesec,%roleslog);
if ($context eq 'domain') {
$domain = $env{'request.role.domain'};
%roleslog=&Apache::lonnet::dump_dom('nohist_rolelog',$domain);
@@ -6435,6 +6615,7 @@ sub print_userchangelogs_display {
$domain = $env{'course.'.$env{'request.course.id'}.'.domain'};
$username = $env{'course.'.$env{'request.course.id'}.'.num'};
$crstype = &Apache::loncommon::course_type();
+ $viewablesec = &Apache::lonuserutils::viewable_section($permission);
my %saveable_parameters = ('show' => 'scalar',);
&Apache::loncommon::store_course_settings('roles_log',
\%saveable_parameters);
@@ -6566,6 +6747,9 @@ ENDSCRIPT
next if ($roleslog{$id}{'logentry'}{'context'} ne $curr{'chgcontext'});
}
}
+ if (($context eq 'course') && ($viewablesec ne '')) {
+ next if ($roleslog{$id}{'logentry'}{'section'} ne $viewablesec);
+ }
$count ++;
next if ($count < $minshown);
unless ($showntableheader) {
@@ -6653,7 +6837,7 @@ sub print_useraccesslogs_display {
my $form = 'document.accesslog';
# set breadcrumbs
- my %breadcrumb_text = &singleuser_breadcrumb();
+ my %breadcrumb_text = &singleuser_breadcrumb('','domain',$udom);
push (@{$brcrum},
{href => "javascript:backPage($form)",
text => $breadcrumb_text{'search'}});
@@ -6677,6 +6861,9 @@ sub print_useraccesslogs_display {
my $bread_crumbs_component = 'User Access Logs';
my $args = { bread_crumbs => $brcrum,
bread_crumbs_component => 'User Management'};
+ if ($env{'form.popup'}) {
+ $args->{'no_nav_bar'} = 1;
+ }
# set javascript
my ($jsback,$elements) = &crumb_utilities();
@@ -6805,14 +6992,14 @@ ENDSCRIPT
$r->rflush();
$showntableheader = 1;
}
- my ($shown,$extra,);
+ my ($shown,$extra);
my ($event,$data) = split(/\s+/,&unescape($event));
if ($event eq 'Role') {
my ($rolecode,$extent) = split(/\./,$data,2);
next if ($extent eq '');
my ($crstype,$desc,$info);
- if ($extent =~ m{^/($match_domain)/($match_courseid)$}) {
- my ($cdom,$cnum) = ($1,$2);
+ if ($extent =~ m{^/($match_domain)/($match_courseid)(?:/(\w+)|)$}) {
+ my ($cdom,$cnum,$sec) = ($1,$2,$3);
my $cid = $cdom.'_'.$cnum;
if (exists($courses{$cid})) {
$crstype = $courses{$cid}{'type'};
@@ -6831,6 +7018,9 @@ ENDSCRIPT
}
}
$extra = &mt($crstype).': '.$desc.' ';
+ if ($sec ne '') {
+ $extra .= ' ('.&mt('Section: [_1]',$sec).')';
+ }
} elsif ($extent =~ m{^/($match_domain)/($match_username|$)}) {
my ($dom,$name) = ($1,$2);
if ($rolecode eq 'au') {
@@ -6879,6 +7069,10 @@ ENDSCRIPT
.'');
}
+ if ($env{'form.popup'} == 1) {
+ $r->print(' '."\n");
+ }
+
# Form Footer
$r->print(
' '
@@ -7598,18 +7792,21 @@ sub build_search_response {
.&mt("Click 'Search'")
.' ';
} else {
- my $helplink = ' href="javascript:helpMenu('."'display'".')"';
- $response .= ' ';
- if ($context eq 'requestcrs') {
- $response .= &mt("You are not authorized to define new users in the new course's domain - [_1].",$targetdom);
- } else {
- $response .= &mt("You are not authorized to create new users in your current role's domain - [_1].",$targetdom);
+ unless (($context eq 'domain') && ($env{'form.action'} eq 'singleuser')) {
+ my $helplink = ' href="javascript:helpMenu('."'display'".')"';
+ $response .= ' ';
+ if ($context eq 'requestcrs') {
+ $response .= &mt("You are not authorized to define new users in the new course's domain - [_1].",$targetdom);
+ } else {
+ $response .= &mt("You are not authorized to create new users in your current role's domain - [_1].",$targetdom);
+ }
+ $response .= ' '
+ .&mt('Please contact the [_1]helpdesk[_2] if you need to create a new user.'
+ ,' '
+ ,' ')
+ .' ';
+
}
- $response .= ' '
- .&mt('Please contact the [_1]helpdesk[_2] if you need to create a new user.'
- ,' '
- ,' ')
- .' ';
}
}
}