--- loncom/interface/loncreateuser.pm 2017/01/30 18:37:34 1.406.2.12 +++ loncom/interface/loncreateuser.pm 2017/03/30 14:08:18 1.438 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Create a user # -# $Id: loncreateuser.pm,v 1.406.2.12 2017/01/30 18:37:34 raeburn Exp $ +# $Id: loncreateuser.pm,v 1.438 2017/03/30 14:08:18 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -252,13 +252,15 @@ sub build_tools_display { 'unofficial' => 'Can request creation of unofficial courses', 'community' => 'Can request creation of communities', 'textbook' => 'Can request creation of textbook courses', + 'placement' => 'Can request creation of placement tests', 'requestauthor' => 'Can request author space', ); if ($context eq 'requestcourses') { %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname, 'requestcourses.official','requestcourses.unofficial', - 'requestcourses.community','requestcourses.textbook'); - @usertools = ('official','unofficial','community','textbook'); + 'requestcourses.community','requestcourses.textbook', + 'requestcourses.placement'); + @usertools = ('official','unofficial','community','textbook','placement'); @options =('norequest','approval','autolimit','validate'); %validations = &Apache::lonnet::auto_courserequest_checks($ccdomain); %reqtitles = &courserequest_titles(); @@ -333,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; @@ -451,12 +454,14 @@ sub coursereq_externaluser { 'unofficial' => 'Can request creation of unofficial courses', 'community' => 'Can request creation of communities', 'textbook' => 'Can request creation of textbook courses', + 'placement' => 'Can request creation of placement tests', ); %userenv = &Apache::lonnet::userenvironment($ccdomain,$ccuname, 'reqcrsotherdom.official','reqcrsotherdom.unofficial', - 'reqcrsotherdom.community','reqcrsotherdom.textbook'); - @usertools = ('official','unofficial','community','textbook'); + 'reqcrsotherdom.community','reqcrsotherdom.textbook', + 'reqcrsotherdom.placement'); + @usertools = ('official','unofficial','community','textbook','placement'); @options = ('approval','validate','autolimit'); %validations = &Apache::lonnet::auto_courserequest_checks($cdom); my $optregex = join('|',@options); @@ -537,6 +542,7 @@ sub courserequest_titles { unofficial => 'Unofficial', community => 'Communities', textbook => 'Textbook', + placement => 'Placement Tests', norequest => 'Not allowed', approval => 'Approval by Dom. Coord.', validate => 'With validation', @@ -749,6 +755,7 @@ sub print_username_entry_form { } } else { my $actiontext = $lt{'srad'}; + my $fixeddom; if ($env{'form.action'} eq 'singlestudent') { if ($crstype eq 'Community') { $actiontext = $lt{'srme'}; @@ -757,6 +764,7 @@ sub print_username_entry_form { } } elsif ($env{'form.action'} eq 'accesslogs') { $actiontext = $lt{'srva'}; + $fixeddom = 1; } elsif (($env{'form.action'} eq 'singleuser') && ($context eq 'domain') && (!&Apache::lonnet::allowed('mau',$defdom))) { $actiontext = $lt{'srvu'}; @@ -768,7 +776,7 @@ sub print_username_entry_form { '
'); } } - $r->print(&entry_form($defdom,$srch,$forcenewuser,$context,$response,$crstype,1)); + $r->print(&entry_form($defdom,$srch,$forcenewuser,$context,$response,$crstype,$fixeddom)); } } @@ -827,11 +835,16 @@ sub entry_form { $inexact = 1; } } - my $cancreate = - &Apache::lonuserutils::can_create_user($dom,$context,$usertype); + my ($cancreate,$noinstd); + if ($env{'form.action'} eq 'accesslogs') { + $noinstd = 1; + } else { + $cancreate = + &Apache::lonuserutils::can_create_user($dom,$context,$usertype); + } my ($userpicker,$cansearch) = &Apache::loncommon::user_picker($dom,$srch,$forcenewuser, - 'document.crtuser',$cancreate,$usertype,$context,$fixeddom); + 'document.crtuser',$cancreate,$usertype,$context,$fixeddom,$noinstd); my $srchbutton = &mt('Search'); if ($env{'form.action'} eq 'singlestudent') { $srchbutton = &mt('Search and Enroll'); @@ -1038,7 +1051,7 @@ ENDSCRIPT $r->print(''); } elsif ($env{'form.action'} eq 'accesslogs') { $r->print("$lt{'srcva'}
"); - $r->print(&entry_form($srch->{'srchdomain'},$srch,undef,'accesslogs',undef,undef,1)); + $r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context,undef,undef,1)); $r->print('

'.$lt{'vacsel'}.'

'); } } @@ -2168,6 +2181,7 @@ $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); @@ -2726,7 +2740,7 @@ sub update_user_data { my (%alerts,%rulematch,%inst_results,%curr_rules); my @userinfo = ('firstname','middlename','lastname','generation','permanentemail','id'); my @usertools = ('aboutme','blog','webdav','portfolio'); - my @requestcourses = ('official','unofficial','community','textbook'); + my @requestcourses = ('official','unofficial','community','textbook','placement'); my @requestauthor = ('requestauthor'); my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($env{'form.ccdomain'}); @@ -2899,7 +2913,7 @@ sub update_user_data { 'requestcourses.community','requestcourses.textbook', 'reqcrsotherdom.official','reqcrsotherdom.unofficial', 'reqcrsotherdom.community','reqcrsotherdom.textbook', - 'requestauthor'], + 'reqcrsotherdom.placement','requestauthor'], $env{'form.ccdomain'},$env{'form.ccuname'}); my ($tmp) = keys(%userenv); if ($tmp =~ /^(con_lost|error)/i) { @@ -3190,8 +3204,9 @@ sub update_user_data { ($env{'user.domain'} eq $env{'form.ccdomain'})) { my %newenvhash; foreach my $key (keys(%changed)) { - if (($key eq 'official') || ($key eq 'unofficial') - || ($key eq 'community') || ($key eq 'textbook')) { + if (($key eq 'official') || ($key eq 'unofficial') || + ($key eq 'community') || ($key eq 'textbook') || + ($key eq 'placement')) { $newenvhash{'environment.requestcourses.'.$key} = $changeHash{'requestcourses.'.$key}; if ($changeHash{'requestcourses.'.$key}) { @@ -3257,7 +3272,7 @@ sub update_user_data { \%newsettingstext); if ($env{'form.cid'} ne $userenv{'id'}) { &Apache::lonnet::idput($env{'form.ccdomain'}, - {$env{'form.ccuname'} => $env{'form.cid'}}); + {$env{'form.ccuname'} => $env{'form.cid'}},$uhome,'ids'); if (($recurseid) && (&Apache::lonnet::allowed('mau',$env{'form.ccdomain'}))) { my $idresult = @@ -3400,6 +3415,7 @@ sub display_userinfo { 'unofficial' => 'Can Request Unofficial Courses', 'community' => 'Can Request Communities', 'textbook' => 'Can Request Textbook Courses', + 'placement' => 'Can Request Placement Tests', 'requestauthor' => 'Can Request Author Role', 'inststatus' => "Affiliation", 'prvs' => 'Previous Value:', @@ -5415,6 +5431,7 @@ sub print_main_menu { groups => 'Community Groups', }, ); + $linktext{'Placement'} = $linktext{'Course'}; my %linktitle = ( 'Course' => { @@ -5429,6 +5446,8 @@ sub print_main_menu { }, ); + $linktitle{'Placement'} = $linktitle{'Course'}; + push(@{ $menu[0]->{items} }, #Category: Single Users { linktext => $linktext{$crstype}{'single'}, @@ -6753,6 +6772,24 @@ ENDSCRIPT return; } + if (&Apache::lonnet::privileged($uname,$udom, + [$env{'request.role.domain'}],['dc','su'])) { + unless (&Apache::lonnet::privileged($env{'user.name'},$env{'user.domain'}, + [$env{'request.role.domain'}],['dc','su'])) { + $r->print('

' + .&mt('You need to be a privileged user to display user access logs for [_1]', + &Apache::loncommon::aboutmewrapper(&Apache::loncommon::plainname($uname,$udom), + $uname,$udom)) + .'

'); + if ($env{'form.popup'}) { + $r->print('

'.&mt('Close window').'

'); + } else { + $r->print(&earlyout_accesslog_form($formname,$prevphasestr,$udom)); + } + return; + } + } + # set defaults my $now = time(); my $defstart = $now - (7*24*3600); @@ -6839,7 +6876,7 @@ ENDSCRIPT $showntableheader = 1; } my ($shown,$extra); - my ($event,$data) = split(/\s+/,&unescape($event)); + my ($event,$data) = split(/\s+/,&unescape($event),2); if ($event eq 'Role') { my ($rolecode,$extent) = split(/\./,$data,2); next if ($extent eq ''); @@ -6891,8 +6928,17 @@ ENDSCRIPT $shown = &mt('Role selection: [_1]',$rolename); } else { $shown = &mt($event); - if ($data ne '') { - $extra = &mt('Client IP address: [_1]',$data); + if ($data =~ /^webdav/) { + my ($path,$clientip) = split(/\s+/,$data,2); + $path =~ s/^webdav//; + if ($clientip ne '') { + $extra = &mt('Client IP address: [_1]',$clientip); + } + if ($path ne '') { + $shown .= ' '.&mt('(WebDAV access to [_1])',$path); + } + } elsif ($data ne '') { + $extra = &mt('Client IP address: [_1]',$data); } } $r->print( @@ -8212,18 +8258,18 @@ sub user_search_result { my $domd_chk = &domdirectorysrch_check($srch); $response .= ''.$instd_chk.'
'; if ($domd_chk eq 'ok') { - $response .= &mt('You may want to search in the LON-CAPA domain instead of the institutional directory.'); + $response .= &mt('You may want to search in the LON-CAPA domain instead of in the institutional directory.'); } $response .= '
'; } } else { unless (($context eq 'requestcrs') && ($srch->{'srchtype'} eq 'exact')) { my $domd_chk = &domdirectorysrch_check($srch); - if ($domd_chk ne 'ok') { + if (($domd_chk ne 'ok') && ($env{'form.action'} ne 'accesslogs')) { my $instd_chk = &instdirectorysrch_check($srch); $response .= ''.$domd_chk.'
'; if ($instd_chk eq 'ok') { - $response .= &mt('You may want to search in the institutional directory instead of the LON-CAPA domain.'); + $response .= &mt('You may want to search in the institutional directory instead of in the LON-CAPA domain.'); } $response .= '
'; } @@ -8324,7 +8370,7 @@ sub user_search_result { $response = ''. &mt('Institutional directory search is not available in domain: [_1]',$showdom). '
'. - &mt('You may want to search in the LON-CAPA domain instead of the institutional directory.'). + &mt('You may want to search in the LON-CAPA domain instead of in the institutional directory.'). '
'; } } @@ -8397,7 +8443,7 @@ sub user_search_result { $response = ''. &mt('Institutional directory search is not available in domain: [_1]',$showdom). '
'. - &mt('You may want to search in the LON-CAPA domain instead of the institutional directory.'). + &mt('You may want to search in the LON-CAPA domain instead of in the institutional directory.'). '
'; } } @@ -8570,7 +8616,7 @@ sub build_search_response { if ($srch->{'srchin'} ne 'alc') { $forcenewuser = 1; my $cansrchinst = 0; - if ($srch->{'srchdomain'}) { + if (($srch->{'srchdomain'}) && ($env{'form.action'} ne 'accesslogs')) { my %domconfig = &Apache::lonnet::get_dom('configuration',['directorysrch'],$srch->{'srchdomain'}); if (ref($domconfig{'directorysrch'}) eq 'HASH') { if ($domconfig{'directorysrch'}{'available'}) {