--- loncom/interface/loncreateuser.pm 2007/12/21 20:34:26 1.221 +++ loncom/interface/loncreateuser.pm 2008/01/06 04:38:57 1.229 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Create a user # -# $Id: loncreateuser.pm,v 1.221 2007/12/21 20:34:26 raeburn Exp $ +# $Id: loncreateuser.pm,v 1.229 2008/01/06 04:38:57 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -76,30 +76,30 @@ my $authformfsys; my $authformloc; sub initialize_authen_forms { - my ($dom,$curr_authtype,$mode) = @_; - my ($krbdefdom)=( $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/); - $krbdefdom= uc($krbdefdom); - my %param = ( formname => 'document.cu', + my ($dom,$formname,$curr_authtype,$mode) = @_; + my ($krbdef,$krbdefdom) = &Apache::loncommon::get_kerberos_defaults($dom); + my %param = ( formname => $formname, kerb_def_dom => $krbdefdom, + kerb_def_auth => $krbdef, domain => $dom, ); my %abv_auth = &auth_abbrev(); - if ($curr_authtype =~ /^(krb4|krb5|internal|localauth|unix):$/) { + if ($curr_authtype =~ /^(krb4|krb5|internal|localauth|unix):(.*)$/) { my $long_auth = $1; + my $curr_autharg = $2; my %abv_auth = &auth_abbrev(); $param{'curr_authtype'} = $abv_auth{$long_auth}; if ($long_auth =~ /^krb(4|5)$/) { $param{'curr_kerb_ver'} = $1; + $param{'curr_autharg'} = $curr_autharg; } if ($mode eq 'modifyuser') { $param{'mode'} = $mode; } } -# no longer static due to configurable kerberos defaults -# $loginscript = &Apache::loncommon::authform_header(%param); + $loginscript = &Apache::loncommon::authform_header(%param); + $authformkrb = &Apache::loncommon::authform_kerberos(%param); $authformnop = &Apache::loncommon::authform_nochange(%param); -# no longer static due to configurable kerberos defaults -# $authformkrb = &Apache::loncommon::authform_kerberos(%param); $authformint = &Apache::loncommon::authform_internal(%param); $authformfsys = &Apache::loncommon::authform_filesystem(%param); $authformloc = &Apache::loncommon::authform_local(%param); @@ -220,6 +220,7 @@ sub print_username_entry_form { my %loaditems = ( 'onload' => "javascript:setFormElements(document.$formtoset)", ); + my %breadcrumb_text = &singleuser_breadcrumb(); my $start_page = &Apache::loncommon::start_page('User Management', $jscript,{'add_entries' => \%loaditems,}); @@ -230,32 +231,29 @@ sub print_username_entry_form { } else { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"javascript:backPage(document.crtuser)", - text=>"Single user search", + text=>$breadcrumb_text{'search'}, faq=>282,bug=>'Instructor Interface',}); } - my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('User Management'); + my $helpitem = 'Course_Change_Privileges'; + if ($env{'form.action'} eq 'custom') { + $helpitem = 'Course_Editing_Custom_Roles'; + } elsif ($env{'form.action'} eq 'singlestudent') { + $helpitem = 'Course_Add_Student'; + } + my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('User Management', + $helpitem); my %existingroles=&Apache::lonuserutils::my_custom_roles(); my $choice=&Apache::loncommon::select_form('make new role','rolename', ('make new role' => 'Generate new role ...',%existingroles)); my %lt=&Apache::lonlocal::texthash( - 'srch' => "User Search", - or => "or", + 'srst' => 'Search for a user and enroll as a student', + 'srad' => 'Search for a user and modify/add user information or roles', 'usr' => "Username", 'dom' => "Domain", 'ecrp' => "Edit Custom Role Privileges", 'nr' => "Name of Role", 'cre' => "Custom Role Editor", - 'mod' => "to modify user information or add/modify roles", - 'enrl' => "to enroll one student", ); - my $help = &Apache::loncommon::help_open_menu(undef,undef,282,'Instructor Interface'); - my $helpsiur=&Apache::loncommon::help_open_topic('Course_Change_Privileges'); - my $helpsist=&Apache::loncommon::help_open_topic('Course_Add_Student'); - my $helpecpr=&Apache::loncommon::help_open_topic('Course_Editing_Custom_Roles'); - my $sellink=&Apache::loncommon::selectstudent_link('crtuser','srchterm','srchdomain'); - if ($sellink) { - $sellink = "$lt{'or'} ".$sellink; - } $r->print($start_page."\n".$crumbs); if ($env{'form.action'} eq 'custom') { if (&Apache::lonnet::allowed('mcr','/')) { @@ -263,19 +261,19 @@ sub print_username_entry_form {
-

$lt{'ecrp'}$helpecpr

+

$lt{'ecrp'}

$lt{'nr'}: $choice
ENDCUSTOM } } else { - my $actiontext = $lt{'mod'}.$helpsiur; + my $actiontext = $lt{'srad'}; if ($env{'form.action'} eq 'singlestudent') { - $actiontext = $lt{'enrl'}.$helpsist; + $actiontext = $lt{'srst'}; } $r->print(" -

$lt{'srch'} $sellink $actiontext

"); +

$actiontext

"); if ($env{'form.origform'} ne 'crtusername') { $r->print("\n".$response); } @@ -287,7 +285,7 @@ ENDCUSTOM sub entry_form { my ($dom,$srch,$forcenewuser,$context,$responsemsg) = @_; my %domconf = &Apache::lonnet::get_dom('configuration',['usercreation'],$dom); - my $usertype; + my ($usertype,$inexact); if (ref($srch) eq 'HASH') { if (($srch->{'srchin'} eq 'dom') && ($srch->{'srchby'} eq 'uname') && @@ -297,6 +295,8 @@ sub entry_form { my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($srch->{'srchdomain'},'username'); $usertype = &Apache::lonuserutils::check_usertype($srch->{'srchdomain'},$srch->{'srchterm'},$rules); + } else { + $inexact = 1; } } my $cancreate = @@ -305,6 +305,11 @@ sub entry_form { &Apache::loncommon::user_picker($dom,$srch,$forcenewuser, 'document.crtuser',$cancreate,$usertype); my $srchbutton = &mt('Search'); + if ($env{'form.action'} eq 'singlestudent') { + $srchbutton = &mt('Search and Enroll'); + } elsif ($cancreate && $responsemsg ne '' && $inexact) { + $srchbutton = &mt('Search or Add New User'); + } my $output = <<"ENDBLOCK";
@@ -313,17 +318,39 @@ $userpicker
ENDBLOCK - if ($cancreate && $env{'form.phase'} eq '') { + if ($env{'form.phase'} eq '') { my $defdom=$env{'request.role.domain'}; my $domform = &Apache::loncommon::select_dom_form($defdom,'srchdomain'); - my $helpcrt=&Apache::loncommon::help_open_topic('Course_Change_Privileges'); my %lt=&Apache::lonlocal::texthash( + 'enro' => 'Enroll one student', + 'admo' => 'Add/modify a single user', + 'crea' => 'create new user if required', + 'uskn' => "username is known", 'crnu' => 'Create a new user', 'usr' => 'Username', 'dom' => 'in domain', - 'cra' => 'Create user', + 'enrl' => 'Enroll', + 'cram' => 'Create/Modify user', ); + my $sellink=&Apache::loncommon::selectstudent_link('crtusername','srchterm','srchdomain'); + my ($title,$buttontext,$showresponse); + if ($env{'form.action'} eq 'singlestudent') { + $title = $lt{'enro'}; + $buttontext = $lt{'enrl'}; + } else { + $title = $lt{'admo'}; + $buttontext = $lt{'cram'}; + } + if ($cancreate) { + $title .= ' ('.$lt{'crea'}.')'; + } else { + $title .= ' ('.$lt{'uskn'}.')'; + } + if ($env{'form.origform'} eq 'crtusername') { + $showresponse = $responsemsg; + } $output .= <<"ENDDOCUMENT"; +
@@ -332,14 +359,15 @@ ENDBLOCK -

$lt{crnu}$helpcrt

-$responsemsg +

$title

+$showresponse - + +
$lt{'usr'}:  $lt{'dom'}:$domform  $sellink  
@@ -377,7 +405,7 @@ END # =================================================================== Phase two sub print_user_selection_page { - my ($r,$response,$srch,$srch_results,$operation,$srcharray,$context) = @_; + my ($r,$response,$srch,$srch_results,$srcharray,$context) = @_; my @fields = ('username','domain','lastname','firstname','permanentemail'); my $sortby = $env{'form.sortby'}; @@ -412,27 +440,24 @@ ENDSCRIPT 'permanentemail' => "permanent e-mail", ); $r->print(&Apache::loncommon::start_page('User Management',$jscript)); - if ($operation eq 'createuser') { - &Apache::lonhtmlcommon::add_breadcrumb - ({href=>"javascript:backPage(document.usersrchform,'','')", - text=>"Create/modify user", - faq=>282,bug=>'Instructor Interface',}, - {href=>"javascript:backPage(document.usersrchform,'get_user_info','select')", - text=>"Select User", - faq=>282,bug=>'Instructor Interface',}); - $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management')); + + my %breadcrumb_text = &singleuser_breadcrumb(); + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"javascript:backPage(document.usersrchform,'','')", + text=>$breadcrumb_text{'search'}, + faq=>282,bug=>'Instructor Interface',}, + {href=>"javascript:backPage(document.usersrchform,'get_user_info','select')", + text=>$breadcrumb_text{'userpicked'}, + faq=>282,bug=>'Instructor Interface',}); + if ($env{'form.action'} eq 'singleuser') { + $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management', + 'Course_Change_Privileges')); $r->print("$lt{'usrch'}
"); $r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context)); $r->print('

'.$lt{'usel'}.'

'); - } elsif ($operation eq 'enrollstudent') { - &Apache::lonhtmlcommon::add_breadcrumb - ({href=>"javascript:backPage(document.usersrchform,'','')", - text=>"Create/modify student", - faq=>282,bug=>'Instructor Interface',}, - {href=>"javascript:backPage(document.usersrchform,'get_user_info','select')", - text=>"Select Student", - faq=>282,bug=>'Instructor Interface',}); - $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management')); + } elsif ($env{'form.action'} eq 'singlestudent') { + $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management', + 'Course_Add_Student')); $r->print($jscript."$lt{'stusrch'}
"); $r->print(&entry_form($srch->{'srchdomain'},$srch,undef,$context)); $r->print('

'.$lt{'stusel'}.'

'); @@ -509,8 +534,7 @@ sub print_user_modification_page { $formname = 'cu'; } my %abv_auth = &auth_abbrev(); - my ($curr_authtype,%rulematch,%inst_results,$curr_kerb_ver,$newuser, - %alerts,%curr_rules,%got_rules); + my (%rulematch,%inst_results,$newuser,%alerts,%curr_rules,%got_rules); my $uhome=&Apache::lonnet::homeserver($ccuname,$ccdomain); if ($uhome eq 'no_host') { my $usertype; @@ -565,32 +589,10 @@ sub print_user_modification_page { } } else { $newuser = 0; - my $currentauth = - &Apache::lonnet::queryauthenticate($ccuname,$ccdomain); - if ($currentauth =~ /^(krb4|krb5|unix|internal|localauth):/) { - $curr_authtype = $abv_auth{$1}; - if ($currentauth =~ /^krb(4|5)/) { - $curr_kerb_ver = $1; - } - } } if ($response) { $response = '
'.$response; } - my $defdom=$env{'request.role.domain'}; - - my ($krbdef,$krbdefdom) = - &Apache::loncommon::get_kerberos_defaults($defdom); - - my %param = ( formname => 'document.cu', - kerb_def_dom => $krbdefdom, - kerb_def_auth => $krbdef, - curr_authtype => $curr_authtype, - curr_kerb_ver => $curr_kerb_ver, - domain => $ccdomain, - ); - $loginscript = &Apache::loncommon::authform_header(%param); - $authformkrb = &Apache::loncommon::authform_kerberos(%param); my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); my $dc_setcourse_code = ''; @@ -620,7 +622,12 @@ sub print_user_modification_page { ({href=>"javascript:backPage($form,'$env{'form.phase'}','modify')", text=>$breadcrumb_text{'modify'}, faq=>282,bug=>'Instructor Interface',}); - my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('User Management'); + my $helpitem = 'Course_Change_Privileges'; + if ($env{'form.action'} eq 'singlestudent') { + $helpitem = 'Course_Add_Student'; + } + my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('User Management', + $helpitem); my $forminfo =<<"ENDFORMINFO";
@@ -643,7 +650,7 @@ ENDFORMINFO # Current user has quota modification privileges $portfolioform = '
'.&portfolio_quota($ccuname,$ccdomain); } - &initialize_authen_forms($ccdomain); + &initialize_authen_forms($ccdomain,$formname); my %lt=&Apache::lonlocal::texthash( 'cnu' => 'Create New User', 'ast' => 'as a student', @@ -764,8 +771,7 @@ ENDCHANGEUSER $r->print(&Apache::lonuserutils::forceid_change($context)); } $r->print(''); - my $user_auth_text = - &user_authentication($ccuname,$ccdomain,$krbdefdom,\%abv_auth); + my $user_auth_text = &user_authentication($ccuname,$ccdomain,$formname); my $user_quota_text; if (&Apache::lonnet::allowed('mpq',$ccdomain)) { # Current user has quota modification privileges @@ -829,7 +835,7 @@ ENDNOPORTPRIV if ($addrolesdisplay) { $r->print('
print(' onClick="verify_message(this.form)" \>'."\n"); + $r->print(' onClick="auth_check()" \>'."\n"); } else { $r->print('onClick="this.form.submit()" \>'."\n"); } @@ -856,7 +862,7 @@ sub singleuser_breadcrumb { $breadcrumb_text{'userpicked'} = 'Select a user', $breadcrumb_text{'modify'} = 'Set section/dates', } else { - $breadcrumb_text{'search'} = 'Create/modify user'; + $breadcrumb_text{'search'} = 'Create/modify a user'; $breadcrumb_text{'userpicked'} = 'Select a user', $breadcrumb_text{'modify'} = 'Set user role', } @@ -886,26 +892,28 @@ sub validation_javascript { 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'); + $dc_setcourse_code = + &Apache::lonuserutils::dc_setcourse_js('cu','singleuser',$context); } else { - $nondc_setsection_code = - &Apache::lonuserutils::setsections_javascript($formname,$groupslist); + my $checkauth; + if (($newuser) || (&Apache::lonnet::allowed('mau',$ccdomain))) { + $checkauth = 1; + } + if ($context eq 'course') { + $nondc_setsection_code = + &Apache::lonuserutils::setsections_javascript($formname,$groupslist, + undef,$checkauth); + } + if ($checkauth) { + $nondc_setsection_code .= + &Apache::lonuserutils::verify_authen($formname,$context); + } } 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". - ''; + ''; return $js; } @@ -1230,22 +1238,9 @@ sub new_domain_roles { } sub user_authentication { - my ($ccuname,$ccdomain,$krbdefdom,$abv_auth) = @_; + my ($ccuname,$ccdomain,$formname) = @_; my $currentauth=&Apache::lonnet::queryauthenticate($ccuname,$ccdomain); - my ($loginscript,$outcome); - if ($currentauth=~/^(krb)(4|5):(.*)/) { - my $long_auth = $1.$2; - my $curr_kerb_ver = $2; - my $krbdefdom=$3; - my $curr_authtype = $abv_auth->{$long_auth}; - my %param = ( formname => 'document.cu', - kerb_def_dom => $krbdefdom, - domain => $ccdomain, - curr_authtype => $curr_authtype, - curr_kerb_ver => $curr_kerb_ver, - ); - $loginscript = &Apache::loncommon::authform_header(%param); - } + my $outcome; # Check for a bad authentication type if ($currentauth !~ /^(krb4|krb5|unix|internal|localauth):/) { # bad authentication scheme @@ -1257,7 +1252,8 @@ sub user_authentication { 'ld' => "Login Data" ); if (&Apache::lonnet::allowed('mau',$ccdomain)) { - &initialize_authen_forms($ccdomain); + &initialize_authen_forms($ccdomain,$formname); + my $choices = &Apache::lonuserutils::set_login($ccdomain,$authformkrb,$authformint,$authformloc); $outcome = < @@ -1278,7 +1274,7 @@ $lt{'uuas'} ($currentauth). $lt{'adcs'}. ENDBADAUTH } } else { # Authentication type is valid - &initialize_authen_forms($ccdomain,$currentauth,'modifyuser'); + &initialize_authen_forms($ccdomain,$formname,$currentauth,'modifyuser'); my ($authformcurrent,$can_modify,@authform_others) = &modify_login_block($ccdomain,$currentauth); if (&Apache::lonnet::allowed('mau',$ccdomain)) { @@ -1508,7 +1504,12 @@ sub update_user_data { {href=>"/adm/createuser", text=>"Result", faq=>282,bug=>'Instructor Interface',}); - $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management')); + my $helpitem = 'Course_Change_Privileges'; + if ($env{'form.action'} eq 'singlestudent') { + $helpitem = 'Course_Add_Student'; + } + $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management', + $helpitem)); $r->print(&update_result_form($uhome)); # Check Inputs if (! $env{'form.ccuname'} ) { @@ -2013,20 +2014,27 @@ END } if ($env{'form.action'} eq 'singlestudent') { &enroll_single_student($r,$uhome,$amode,$genpwd,$now,$newuser); + $r->print('

'. &mt('Enroll Another Student').'

'); } else { - my $rolechanges = &update_roles($r); - if (!$rolechanges && $namechanged) { + my @rolechanges = &update_roles($r); + if ($namechanged) { if ($context eq 'course') { if (@userroles > 0) { - if (grep(/^st$/,@userroles)) { - my $classlistupdated = - &Apache::lonuserutils::update_classlist($cdom, + if ((@rolechanges == 0) || + (!(grep(/^st$/,@rolechanges)))) { + if (grep(/^st$/,@userroles)) { + my $classlistupdated = + &Apache::lonuserutils::update_classlist($cdom, $cnum,$env{'form.ccdomain'}, $env{'form.ccuname'},\%userupdate); + } } } } } + my $userinfo = &Apache::loncommon::plainname($env{'form.ccuname'}, + $env{'form.ccdomain'}); + $r->print('

'.&mt('Modify this user: ([_1])',$userinfo).''.(' 'x5).''.&mt('Create/Modify Another User').'

'); } $r->print(&Apache::loncommon::end_page()); } @@ -2034,7 +2042,7 @@ END sub update_roles { my ($r) = @_; my $now=time; - my $rolechanges = 0; + my @rolechanges; my %disallowed; $r->print('

'.&mt('Modifying Roles').'

'); foreach my $key (keys (%env)) { @@ -2058,6 +2066,9 @@ sub update_roles { $now); $r->print($result); } + if (!grep(/^\Q$role\E$/,@rolechanges)) { + push(@rolechanges,$role); + } } if ($key=~m{^form\.rev\:([^_]+)_cr\.cr/($match_domain)/($match_username)/(\w+)$}s) { # Revoke custom role @@ -2066,8 +2077,10 @@ sub update_roles { &Apache::lonnet::revokecustomrole($env{'form.ccdomain'}, $env{'form.ccuname'},$1,$2,$3,$4). '
'); + if (!grep(/^cr$/,@rolechanges)) { + push(@rolechanges,'cr'); + } } - $rolechanges ++; } elsif ($key=~/^form\.del/) { if ($key=~/^form\.del\:([^\_]+)\_([^\_\.]+)$/) { # Delete standard role @@ -2085,6 +2098,9 @@ sub update_roles { $now); $r->print($result); } + if (!grep(/^\Q$role\E$/,@rolechanges)) { + push(@rolechanges,$role); + } } if ($key=~m{^form\.del\:([^_]+)_cr\.cr/($match_domain)/($match_username)/(\w+)$}) { my ($url,$rdom,$rnam,$rolename) = ($1,$2,$3,$4); @@ -2094,8 +2110,10 @@ sub update_roles { &Apache::lonnet::assigncustomrole($env{'form.ccdomain'}, $env{'form.ccuname'},$url,$rdom,$rnam,$rolename,$now, 0,1).'
'); + if (!grep(/^cr$/,@rolechanges)) { + push(@rolechanges,'cr'); + } } - $rolechanges ++; } elsif ($key=~/^form\.ren/) { my $udom = $env{'form.ccdomain'}; my $uname = $env{'form.ccuname'}; @@ -2109,7 +2127,11 @@ sub update_roles { if ($url =~ m-^/($match_domain)/($match_courseid)/?(\w*)$-) { my $result = &Apache::loncommon::commit_studentrole(\$logmsg,$udom,$uname,$url,$role,$now,0,$1,$2,$3); if (($result =~ /^error/) || ($result eq 'not_in_class') || ($result eq 'unknown_course') || ($result eq 'refused')) { - $output = "Error: $result\n"; + if ($result eq 'refused' && $logmsg) { + $output = $logmsg; + } else { + $output = "Error: $result\n"; + } } else { $output = &mt('Assigning').' '.$role.' in '.$url. &mt('starting').' '.localtime($now). @@ -2124,6 +2146,9 @@ sub update_roles { $role,$url,$result).'
'; } $r->print($output); + if (!grep(/^\Q$role\E$/,@rolechanges)) { + push(@rolechanges,$role); + } } # Re-enable custom role if ($key=~m{^form\.ren\:([^_]+)_cr\.cr/($match_domain)/($match_username)/(\w+)$}) { @@ -2133,8 +2158,10 @@ sub update_roles { $url,$rdom,$rnam,$rolename,0,$now); $r->print(&mt('Re-enabling custom role [_1] by [_2]@[_3] in [_4] : [_5]', $rolename,$rnam,$rdom,$url,$result).'
'); + if (!grep(/^cr$/,@rolechanges)) { + push(@rolechanges,'cr'); + } } - $rolechanges ++; } elsif ($key=~/^form\.act/) { my $udom = $env{'form.ccdomain'}; my $uname = $env{'form.ccuname'}; @@ -2169,6 +2196,9 @@ sub update_roles { $r->print(&Apache::loncommon::commit_customrole($udom,$uname,$securl,$three,$four,$five,$start,$end)); } } + if (!grep(/^cr$/,@rolechanges)) { + push(@rolechanges,'cr'); + } } elsif ($key=~/^form\.act\_($match_domain)\_($match_name)\_([^\_]+)$/) { # Activate roles for sections with 3 id numbers # set start, end times, and the url for the class @@ -2207,7 +2237,10 @@ sub update_roles { if ($emptysec) { $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$three,$start,$end,$one,$two,'')); } - } + } + if (!grep(/^\Q$three\E$/,@rolechanges)) { + push(@rolechanges,$three); + } } elsif ($key=~/^form\.act\_([^\_]+)\_([^\_]+)$/) { # Activate roles for sections with two id numbers # set start, end times, and the url for the class @@ -2217,26 +2250,31 @@ sub update_roles { my $end = ( $env{'form.end_'.$1.'_'.$2} ? $env{'form.end_'.$1.'_'.$2} : 0 ); - my $url='/'.$1.'/'; + my $one = $1; + my $two = $2; + my $url='/'.$one.'/'; # split multiple sections my %sections = (); - my $num_sections = &build_roles($env{'form.sec_'.$1.'_'.$2},\%sections,$2); + my $num_sections = &build_roles($env{'form.sec_'.$one.'_'.$two},\%sections,$two); if ($num_sections == 0) { - $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$2,$start,$end,$1,undef,'')); + $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$two,$start,$end,$one,undef,'')); } else { my $emptysec = 0; foreach my $sec (sort {$a cmp $b} keys %sections) { if ($sec ne '') { my $securl = $url.'/'.$sec; - $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$securl,$2,$start,$end,$1,undef,$sec)); + $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$securl,$two,$start,$end,$one,undef,$sec)); } else { $emptysec = 1; } } if ($emptysec) { - $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$2,$start,$end,$1,undef,'')); + $r->print(&Apache::loncommon::commit_standardrole($udom,$uname,$url,$two,$start,$end,$one,undef,'')); } } + if (!grep(/^\Q$two\E$/,@rolechanges)) { + push(@rolechanges,$two); + } } else { $r->print('

'.&mt('ERROR').': '.&mt('Unknown command').' '.$key.'


'); } @@ -2248,15 +2286,14 @@ sub update_roles { } $r->print(' '.&mt('Please go back and choose a different section name.').'


'); } - $rolechanges ++; } } # End of foreach (keys(%env)) # Flush the course logs so reverse user roles immediately updated &Apache::lonnet::flushcourselogs(); - if (!$rolechanges) { + if (@rolechanges == 0) { $r->print(&mt('No roles to modify')); } - return $rolechanges; + return @rolechanges; } sub enroll_single_student { @@ -2475,7 +2512,8 @@ sub custom_role_editor { {href=>"javascript:backPage(document.form1,'','')", text=>"Edit custom role", faq=>282,bug=>'Instructor Interface',}); - $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management', + 'Course_Editing_Custom_Roles')); $r->print($body_top); my %lt=&Apache::lonlocal::texthash( @@ -2615,7 +2653,8 @@ sub set_custom_role { {href=>"javascript:backPage(document.customresult,'set_custom_roles','')", text=>"Result", faq=>282,bug=>'Instructor Interface',}); - $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('User Management', + 'Course_Editing_Custom_Roles')); my ($rdummy,$roledef)= &Apache::lonnet::get('roles',["rolesdef_$rolename"]); @@ -2723,7 +2762,7 @@ sub handler { ({href=>'/adm/createuser?action=upload&state=', text=>"Upload Users List"}); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Upload Users List', - 'User_Management_Upload')); + 'Course_Create_Class_List')); $r->print(''."\n"); @@ -2749,7 +2788,6 @@ sub handler { foreach my $item (@search) { $srch->{$item} = $env{'form.'.$item}; } - if (($phase eq 'get_user_info') || ($phase eq 'userpicked') || ($phase eq 'createnewuser')) { if ($env{'form.phase'} eq 'createnewuser') { @@ -2772,14 +2810,8 @@ sub handler { $currstate = $env{'form.currstate'}; } if ($currstate eq 'select') { - my $operation; - if ($env{'form.action'} eq 'singleuser') { - $operation = 'createuser'; - } elsif ($env{'form.action'} eq 'singlestudent') { - $operation = 'enrollstudent'; - } &print_user_selection_page($r,$response,$srch,$results, - $operation,\@search,$context); + \@search,$context); } elsif ($currstate eq 'modify') { my ($ccuname,$ccdomain); if (($srch->{'srchby'} eq 'uname') && @@ -2801,6 +2833,7 @@ sub handler { } elsif ($currstate eq 'query') { &print_user_query_page($r,'createuser'); } else { + $env{'form.phase'} = ''; &print_username_entry_form($r,$context,$response,$srch, $forcenewuser); } @@ -2833,13 +2866,13 @@ sub handler { my $choice = $env{'form.bulkaction'}; $r->print(&header()); $r->print(&Apache::lonhtmlcommon::breadcrumbs("Update Users", - 'User_Management_List')); + 'Course_View_Class_List')); if ($permission->{'cusr'}) { &Apache::lonuserutils::update_user_list($r,$context,$setting,$choice); - $r->print('

'.&mt('Display User Lists').''); $r->print(&Apache::loncommon::end_page()); } else { $r->print(&mt('You are not authorized to make bulk changes to user roles')); + $r->print('

'.&mt('Display User Lists').''); $r->print(&Apache::loncommon::end_page()); } } else { @@ -2865,7 +2898,7 @@ sub handler { $r->print(&header(&add_script(&verify_user_display()))); } $r->print(&Apache::lonhtmlcommon::breadcrumbs("List Users", - 'User_Management_List')); + 'Course_View_Class_List')); &Apache::lonuserutils::print_userlist($r,undef,$permission,$context, $formname,$totcodes,$codetitles,$idlist,$idlist_titles); $r->print(&Apache::loncommon::end_page()); @@ -2965,24 +2998,24 @@ sub print_main_menu { my @menu = ( { text => $links{$context}{'upload'}, - help => 'User_Management_Upload', + help => 'Course_Create_Class_List', action => 'upload', permission => $permission->{'cusr'}, }, { text => $links{$context}{'singleuser'}, - help => 'User_Management_Single_User', + help => 'Course_Change_Privileges', action => 'singleuser', permission => $permission->{'cusr'}, }, { text => $links{$context}{'listusers'}, - help => 'User_Management_List', + help => 'Course_View_Class_List', action => 'listusers', permission => ($permission->{'view'} || $permission->{'cusr'}), }, ); if ($context eq 'domain' || $context eq 'course') { my $customlink = { text => 'Edit Custom Roles', - help => 'Custom_Role_Edit', + help => 'Course_Editing_Custom_Roles', action => 'custom', permission => $permission->{'custom'}, }; @@ -2993,7 +3026,7 @@ sub print_main_menu { my @courselinks = ( { text => 'Enroll a Single Student', - help => 'Course_Single_Student', + help => 'Course_Add_Student', action => 'singlestudent', permission => $permission->{'cusr'}, }, @@ -3005,6 +3038,7 @@ sub print_main_menu { if (!exists($permission->{'cusr_section'})) { push(@courselinks, { text => 'Automated Student Enrollment Manager', + help => 'Course_Automated_Enrollment', permission => (&Apache::lonnet::auto_run($cnum,$cdom) && $permission->{'cusr'}), url => '/adm/populate', @@ -3291,11 +3325,15 @@ sub directorysrch_check { my ($insttypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($srch->{'srchdomain'}); my @longtypes; foreach my $item (@usertypes) { - push (@longtypes,$insttypes->{$item}); + if (defined($insttypes->{$item})) { + push (@longtypes,$insttypes->{$item}); + } elsif ($item eq 'default') { + push (@longtypes,&mt('other')); + } } my $insttype_str = join(', ',@longtypes); return &mt('Institutional directory search in domain: [_1] is not available to your user type: ',$showdom).$insttype_str; - } + } } else { $can_search = 1; } @@ -3416,7 +3454,7 @@ sub build_search_response { &Apache::lonuserutils::can_create_user($env{'request.role.domain'},$context); if ($cancreate) { my $showdom = &display_domain_info($env{'request.role.domain'}); - $response .= '

'.&mt("To add a new user (you can only create new users in your current role's domain - [_1]):",$env{'request.role.domain'}).'


'; + $response .= '

'.&mt("To add a new user (you can only create new users in your current role's domain - [_1]):",$env{'request.role.domain'}).'
'; } else { my $helplink = ' href="javascript:helpMenu('."'display'".')"'; $response .= '

'.&mt("You are not authorized to create new users in your current role's domain - [_1].",$env{'request.role.domain'}).'
'.&mt('Contact the helpdesk if you need to create a new user.',$helplink).'

'; @@ -3561,48 +3599,49 @@ $table. sub course_level_row { my ($protectedcourse,$role,$area,$domain,$plrole,$sections_count,$lt) = @_; - my $table = &Apache::loncommon::start_data_table_row(). - ' '."\n". - ' '.$plrole.''."\n". - ''.$area.'
Domain: '.$domain.''."\n"; + my $row = &Apache::loncommon::start_data_table_row(). + ' '."\n". + ' '.$plrole.''."\n". + ' '.$area.'
Domain: '.$domain.''."\n"; if ($role eq 'cc') { - $table .= ' '; + $row .= ' '; } elsif ($env{'request.course.sec'} ne '') { - $table .= ' '. - $env{'request.course.sec'}.''; + $row .= ' '. + $env{'request.course.sec'}.''; } else { if (ref($sections_count) eq 'HASH') { my $currsec = &Apache::lonuserutils::course_sections($sections_count, $protectedcourse.'_'.$role); - $table .= ''. - ' - - - '; + '
'.$lt->{'exs'}.'
'. - $currsec.'
   '.$lt->{'new'}.'
'. + $row .= '
'."\n". + ''."\n". + ' '."\n". + ' '."\n". + ' '."\n". - '
'.$lt->{'exs'}.'
'. + $currsec.'
   '.$lt->{'new'}.'
'. ''. '
'."\n"; } else { - $table .= ''; + $row .= ''."\n"; } } - $table .= < + $row .= < $lt->{'ssd'} - + $lt->{'sed'} ENDTIMEENTRY - $table.= &Apache::loncommon::end_data_table_row(); + $row .= &Apache::loncommon::end_data_table_row(); + return $row; } sub course_level_dc {