--- loncom/interface/loncreateuser.pm 2016/11/11 02:13:51 1.406.2.6 +++ loncom/interface/loncreateuser.pm 2016/11/12 00:39:39 1.422 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Create a user # -# $Id: loncreateuser.pm,v 1.406.2.6 2016/11/11 02:13:51 raeburn Exp $ +# $Id: loncreateuser.pm,v 1.422 2016/11/12 00:39:39 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); @@ -615,6 +620,7 @@ sub courserequest_titles { unofficial => 'Unofficial', community => 'Communities', textbook => 'Textbook', + placement => 'Placement Tests', norequest => 'Not allowed', approval => 'Approval by Dom. Coord.', validate => 'With validation', @@ -751,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)", @@ -779,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", @@ -834,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') { @@ -927,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( @@ -1044,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", @@ -1057,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'; @@ -1077,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') { @@ -1273,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'; @@ -1495,7 +1519,7 @@ ENDAUTH $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()); @@ -1515,10 +1539,10 @@ ENDAUTH if ((!$isauthor) && ((&Apache::lonnet::allowed('cau',$env{'request.role.domain'})) || (&Apache::lonnet::allowed('udp',$env{'request.role.domain'}))) && - ($env{'request.role.domain'} eq $ccdomain)) { + ($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); } @@ -1590,7 +1614,7 @@ ENDNOTOOLSPRIV } 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']; + $statuses = ['active']; } if ($env{'form.action'} ne 'singlestudent') { &display_existing_roles($r,$ccuname,$ccdomain,\%inccourses,$context, @@ -1648,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') { @@ -1656,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; } @@ -1819,7 +1848,7 @@ sub display_existing_roles { if ($active) { next unless($showall || $showactive); } else { - next unless($showall || $showexpired); + next unless($showall || $showexpired); } # Is this a custom role? Get role owner and title. my ($croleudom,$croleuname,$croletitle)= @@ -1830,11 +1859,12 @@ sub display_existing_roles { my $class='Unknown'; my $credits=''; my $csec; - if ($area =~ m{^/($match_domain)/($match_courseid)} ) { + 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$/) { @@ -1963,7 +1993,7 @@ sub display_existing_roles { } else { $row.=' '; } - $row.= ''; + $row.= ''; } my $plaintext=''; if (!$croletitle) { @@ -1994,7 +2024,8 @@ sub display_existing_roles { $rolepriv{$envkey}='edit'; } else { if ($context eq 'domain') { - if (&Apache::lonnet::allowed('vur',$ccdomain)) { + if ((&Apache::lonnet::allowed('vur',$ccdomain)) && + ($envkey=~m{^/$ccdomain/})) { $rolepriv{$envkey}='view'; } } elsif ($context eq 'course') { @@ -2231,6 +2262,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); @@ -2680,7 +2712,7 @@ sub update_user_data { $jsback."\n". '// ]]>'."\n". ''."\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'}, @@ -2789,7 +2821,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'}); @@ -2968,7 +3000,8 @@ sub update_user_data { 'requestcourses.community','requestcourses.textbook', 'reqcrsotherdom.official','reqcrsotherdom.unofficial', 'reqcrsotherdom.community','reqcrsotherdom.textbook', - 'requestauthor','adhocroles.'.$env{'request.role.domain'}], + 'reqcrsotherdom.placement','requestauthor', + 'adhocroles.'.$env{'request.role.domain'}], $env{'form.ccdomain'},$env{'form.ccuname'}); my ($tmp) = keys(%userenv); if ($tmp =~ /^(con_lost|error)/i) { @@ -3271,8 +3304,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}) { @@ -3341,7 +3375,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 = @@ -3484,6 +3518,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', 'adhocroles' => 'Ad Hoc Roles Selectable via Helpdesk Role', 'inststatus' => "Affiliation", @@ -4524,7 +4559,7 @@ sub custom_role_editor { ); my $args = { bread_crumbs => $brcrum, bread_crumbs_component => 'User Management'}; - + $r->print(&Apache::loncommon::start_page('Custom Role Editor', $head_script,$args). $body_top); @@ -5165,13 +5200,12 @@ sub handler { } elsif ($env{'form.state'} eq 'done') { $r->print('

'.&mt('Enrollment request processing').'

'."\n"); $r->print(&Apache::loncoursequeueadmin::update_request_queue($context, - $cdom,$cnum,$coursedesc)); + $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') { if ($permission->{cusr} || $permission->{view}) { &print_userchangelogs_display($r,$context,$permission,$brcrum); @@ -5432,9 +5466,9 @@ sub print_main_menu { ); if ($linkcontext eq 'domain') { unless ($permission->{'cusr'}) { - $links{'domain'}{'singleuser'} = 'View a User'; + $links{'domain'}{'singleuser'} = 'View a User'; $linktitles{'domain'}{'singleuser'} = 'View information about a user in the domain'; - + } } elsif ($linkcontext eq 'course') { unless ($permission->{'cusr'}) { @@ -5552,6 +5586,7 @@ sub print_main_menu { groups => 'Community Groups', }, ); + $linktext{'Placement'} = $linktext{'Course'}; my %linktitle = ( 'Course' => { @@ -5566,6 +5601,8 @@ sub print_main_menu { }, ); + $linktitle{'Placement'} = $linktitle{'Course'}; + push(@{ $menu[0]->{items} }, #Category: Single Users { linktext => $linktext{$crstype}{'single'}, @@ -6177,7 +6214,7 @@ ENDSCRIPT } elsif ($item eq 'approval') { my ($currnotified,$currapproval,%appchecked); my %selfdescs = &Apache::lonuserutils::selfenroll_default_descs(); - if (ref($currsettings) eq 'HASH') { + if (ref($currsettings) eq 'HASH') { $currnotified = $currsettings->{'selfenroll_notifylist'}; $currapproval = $currsettings->{'selfenroll_approval'}; } @@ -6305,8 +6342,8 @@ ENDSCRIPT .&mt('Save').'" onclick="validate_types(this.form);" />'; } $output .= '' - .''."\n" - .$additional.''; + .''."\n" + .$additional.''; $r->print($output); return; } @@ -6711,7 +6748,7 @@ ENDSCRIPT } } if (($context eq 'course') && ($viewablesec ne '')) { - next if ($roleslog{$id}{'logentry'}{'section'} ne $viewablesec); + next if ($roleslog{$id}{'logentry'}{'section'} ne $viewablesec); } $count ++; next if ($count < $minshown); @@ -6800,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'}}); @@ -7748,18 +7785,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.' - ,' ' - ,'') - .'
'; } } }