--- loncom/interface/loncreateuser.pm 2007/07/29 04:32:44 1.161 +++ loncom/interface/loncreateuser.pm 2007/07/31 18:58:07 1.164 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Create a user # -# $Id: loncreateuser.pm,v 1.161 2007/07/29 04:32:44 raeburn Exp $ +# $Id: loncreateuser.pm,v 1.164 2007/07/31 18:58:07 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -200,111 +200,13 @@ sub print_username_entry_form { $formtoset = 'docustom'; $env{'form.rolename'} = $env{'form.startrolename'}; } - my ($newuserscript,$newuservalidate); - - if ($forcenewuser) { - $newuserscript = <<"ENDSCRIPT"; - -function setSearch() { - var createnew = 0; - for (var i=0; i<document.crtuser.forcenew.length; i++) { - if (document.crtuser.forcenew[i].checked) { - if (document.crtuser.forcenew[i].value == 1) { - createnew = 1; - } - } - } - if (createnew == 1) { - for (var i=0; i<document.crtuser.srchby.length; i++) { - if (document.crtuser.srchby.options[i].value == 'uname') { - document.crtuser.srchby.selectedIndex = i; - } - } - for (var i=0; i<document.crtuser.srchin.length; i++) { - if (document.crtuser.srchin.options[i].value == 'dom') { - document.crtuser.srchin.selectedIndex = i; - } - } - for (var i=0; i<document.crtuser.srchtype.length; i++) { - if (document.crtuser.srchtype.options[i].value == 'exact') { - document.crtuser.srchtype.selectedIndex = i; - } - } - for (var i=0; i<document.crtuser.srchdomain.length; i++) { - if (document.crtuser.srchdomain.options[i].value == '$env{'request.role.domain'}') { - document.crtuser.srchdomain.selectedIndex = i; - } - } - } -} -ENDSCRIPT - $newuservalidate = <<"ENDBLOCK"; - setSearch(); -ENDBLOCK - } - my $validatescript = <<"ENDSCRIPT"; - -function validateEntry() { - var checkok = 1; - var srchin = document.crtuser.srchin.options[document.crtuser.srchin.selectedIndex].value; - var srchtype = document.crtuser.srchtype.options[document.crtuser.srchtype.selectedIndex].value; - var srchby = document.crtuser.srchby.options[document.crtuser.srchby.selectedIndex].value; - var srchdomain = document.crtuser.srchdomain.options[document.crtuser.srchdomain.selectedIndex].value; - var srchterm = document.crtuser.srchterm.value; - var msg = ""; - - if (srchterm == "") { - checkok = 0; - msg += "You must include some text to search for.\\n"; - } - - $newuservalidate - - if (srchtype== 'contains') { - if (srchterm.length < 3) { - checkok = 0; - msg += "The text you are searching for must contain at least three characters when using a 'contained in' type search.\\n"; - } - } - if (srchin == 'instd') { - if (srchdomain == '') { - checkok = 0; - msg += "You must choose a domain when using an institutional directory search.\\n"; - } - } - if (srchin == 'dom') { - if (srchdomain == '') { - checkok = 0; - msg += "You must choose a domain when using a domain search.\\n"; - } - } - if (srchby == 'lastfirst') { - if (srchterm.indexOf(",") == -1) { - checkok = 0; - msg += "When using searching by last,first you must include a comma as separator between last name and first name.\\n"; - } - if (srchterm.indexOf(",") == srchterm.length -1) { - checkok = 0; - msg += "When searching by last,first you must include at least one character in the first name.\\n"; - } - } - if (checkok == 0) { - alert("The following need to be corrected before the search can be run:\\n"+msg); - return; - } - if (checkok == 1) { - document.crtuser.submit(); - } -} - -ENDSCRIPT my ($jsback,$elements) = &crumb_utilities(); my $jscript = &Apache::loncommon::studentbrowser_javascript()."\n". '<script type"text/javascript">'."\n". &Apache::lonhtmlcommon::set_form_elements($elements->{$formtoset}). - $newuserscript.$validatescript.'</script>'."\n"; + '</script>'."\n"; my %loaditems = ( 'onload' => "javascript:setFormElements(document.$formtoset)", @@ -516,8 +418,6 @@ sub print_user_modification_page { $loginscript = &Apache::loncommon::authform_header(%param); $authformkrb = &Apache::loncommon::authform_kerberos(%param); - $ccuname =&LONCAPA::clean_username($ccuname); - $ccdomain=&LONCAPA::clean_domain($ccdomain); my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); my $dc_setcourse_code = ''; my $nondc_setsection_code = ''; @@ -768,12 +668,12 @@ ENDFORMINFO srchby => 'uname', srchtype => 'exact', }; - if ((exists($env{'form.seluname'})) && (exists($env{'form.seludom'}))) { + if ($env{'form.phase'} eq 'userpicked') { $instsrch->{'srchterm'} = $env{'form.seluname'}; $instsrch->{'srchdomain'} = $env{'form.seludom'}; } else { - $instsrch->{'srchterm'} = $env{'form.srchterm'}; - $instsrch->{'srchdomain'} = $env{'form.srchdomain'}, + $instsrch->{'srchterm'} = $ccuname; + $instsrch->{'srchdomain'} = $ccdomain, } if (($instsrch->{'srchterm'} ne '') && ($instsrch->{'srchdomain'} ne '')) { $newuser = $instsrch->{'srchterm'}.':'.$instsrch->{'srchdomain'}; @@ -784,7 +684,7 @@ ENDFORMINFO %dirsrch_results = &Apache::lonnet::inst_directory_query($instsrch); if (ref($dirsrch_results{$newuser}) eq 'HASH') { %inst_results = %{$dirsrch_results{$newuser}}; - } + } } } my $home_server_list= @@ -1407,15 +1307,13 @@ sub update_user_data { $r->print($error.&mt('Invalid login mode or password').$end); return; } + + + $r->print('<h2>'.&mt('User [_1] in domain [_2]', + $env{'form.ccuname'}, $env{'form.ccdomain'}).'</h2>'); + if ($env{'form.makeuser'}) { - # Create a new user - my %lt=&Apache::lonlocal::texthash( - 'cru' => "Creating user", - 'id' => "in domain" - ); - $r->print(<<ENDNEWUSERHEAD); -<h3>$lt{'cru'} "$env{'form.ccuname'}" $lt{'id'} "$env{'form.ccdomain'}"</h3> -ENDNEWUSERHEAD + $r->print('<h3>'.&mt('Creating new account.').'</h3>'); # Check for the authentication mode and password if (! $amode || ! $genpwd) { $r->print($error.&mt('Invalid login mode or password').$end); @@ -1448,13 +1346,6 @@ ENDNEWUSERHEAD } elsif (($env{'form.login'} ne 'nochange') && ($env{'form.login'} ne '' )) { # Modify user privileges - my %lt=&Apache::lonlocal::texthash( - 'usr' => "User", - 'id' => "in domain" - ); - $r->print(<<ENDMODIFYUSERHEAD); -<h2>$lt{'usr'} "$env{'form.ccuname'}" $lt{'id'} "$env{'form.ccdomain'}"</h2> -ENDMODIFYUSERHEAD if (! $amode || ! $genpwd) { $r->print($error.'Invalid login mode or password'.$end); return; @@ -1618,16 +1509,11 @@ END # They did not want to change the users name but we can # still tell them what the name is my %lt=&Apache::lonlocal::texthash( - 'usr' => "User", - 'id' => "in domain", - 'gen' => "Generation", 'mail' => "Permanent e-mail", 'disk' => "Disk space allocated to user's portfolio files", ); $r->print(<<"END"); -<h2>$lt{'usr'} "$env{'form.ccuname'}" $lt{'id'} "$env{'form.ccdomain'}"</h2> -<h4>$userenv{'firstname'} $userenv{'middlename'} $userenv{'lastname'} </h4> -<h4>$lt{'gen'}: $userenv{'generation'}</h4> +<h4>$userenv{'firstname'} $userenv{'middlename'} $userenv{'lastname'} $userenv{'generation'}</h4> <h4>$lt{'mail'}: $userenv{'permanentemail'}</h4> END if ($putresult eq 'ok') { @@ -1855,7 +1741,7 @@ END } # End of foreach (keys(%env)) # Flush the course logs so reverse user roles immediately updated &Apache::lonnet::flushcourselogs(); - $r->print('<p><a href="/adm/createuser">Create/Modify Another User</a></p>'); + $r->print('<p><a href="/adm/createuser">'.&mt('Create/Modify Another User').'</a></p>'); $r->print('<form name="userupdate" method="post" />'."\n"); foreach my $item ('srchby','srchin','srchtype','srchterm','srchdomain','ccuname','ccdomain') { $r->print('<input type="hidden" name="'.$item.'" value="'.$env{'form.'.$item}.'" />'."\n"); @@ -2240,7 +2126,8 @@ sub handler { &print_user_selection_page($r,$response,$srch,$results); } elsif ($state eq 'modify') { my ($ccuname,$ccdomain); - if ($srch->{'srchby'} eq 'uname') { + if (($srch->{'srchby'} eq 'uname') && + ($srch->{'srchtype'} eq 'exact')) { $ccuname = $srch->{'srchterm'}; $ccdomain= $srch->{'srchdomain'}; } else { @@ -2281,7 +2168,6 @@ sub handler { #-------------------------------------------------- functions for &phase_two sub user_search_result { my ($srch) = @_; - my @alldomains = sort(&Apache::lonnet::all_domains()); my %allhomes; my %inst_matches; my %srch_results; @@ -2301,7 +2187,7 @@ sub user_search_result { } if (($srch->{'srchin'} eq 'dom') || ($srch->{'srchin'} eq 'instd')) { if (($srch->{'srchdomain'} eq '') || - (!(grep/^\Q$srch->{'srchdomain'}\E$/,@alldomains))) { + ! (&Apache::lonnet::domain($srch->{'srchdomain'}))) { $response = &mt('You must specify a valid domain when searching in a domain or institutional directory.') } } @@ -2318,7 +2204,7 @@ sub user_search_result { } } if ($response ne '') { - return ($state,$response); + return ($state,'<span class="LC_warning">'.$response.'</span>'); } if ($srch->{'srchby'} eq 'uname') { if (($srch->{'srchin'} eq 'dom') || ($srch->{'srchin'} eq 'crs')) { @@ -2336,18 +2222,37 @@ sub user_search_result { } } else { if ($srch->{'srchin'} eq 'dom') { - my $uhome=&Apache::lonnet::homeserver($srch->{'srchterm'},$srch->{'srchdomain'}); - if ($uhome eq 'no_host') { + if ($srch->{'srchtype'} eq 'exact') { + my $uhome=&Apache::lonnet::homeserver($srch->{'srchterm'},$srch->{'srchdomain'}); + if ($uhome eq 'no_host') { + ($state,$response,$forcenewuser) = + &build_search_response($srch,%srch_results); + } else { + $state = 'modify'; + } + } else { + %srch_results = &Apache::lonnet::usersearch($srch); ($state,$response,$forcenewuser) = &build_search_response($srch,%srch_results); - } else { - $state = 'modify'; } } else { my %courseusers = &get_courseusers(); - if (exists($courseusers{$srch->{'srchterm'}.':'.$srch->{'srchdomain'}})) { - $state = 'modify'; + if ($srch->{'srchtype'} eq 'exact') { + if (exists($courseusers{$srch->{'srchterm'}.':'.$srch->{'srchdomain'}})) { + $state = 'modify'; + } else { + ($state,$response,$forcenewuser) = + &build_search_response($srch,%srch_results); + } } else { + foreach my $user (keys(%courseusers)) { + my ($cuname,$cudomain) = split(/:/,$user); + if ($cudomain eq $srch->{'srchdomain'}) { + if ($cuname =~ /\Q$srch->{'srchterm'}\E/i) { + $srch_results{$user} = ''; + } + } + } ($state,$response,$forcenewuser) = &build_search_response($srch,%srch_results); } @@ -2424,11 +2329,11 @@ sub directorysrch_check { ['directorysrch'],$srch->{'srchdomain'}); if (ref($dom_inst_srch{'directorysrch'}) eq 'HASH') { if (!$dom_inst_srch{'directorysrch'}{'available'}) { - return &mt('Directory search unavailable in domain: [_1]',$srch->{'srchdomain'}); + return &mt('Institutional directory search unavailable in domain: [_1]',$srch->{'srchdomain'}); } if ($dom_inst_srch{'directorysrch'}{'localonly'}) { if ($env{'request.role.domain'} ne $srch->{'srchdomain'}) { - return &mt('Directory search in domain: [_1] is only allowed for users with a current role in the domain.',$srch->{'srchdomain'}); + return &mt('Insitutional directory search in domain: [_1] is only allowed for users with a current role in the domain.',$srch->{'srchdomain'}); } my @usertypes = split(/:/,$env{'environment.inststatus'}); if (!@usertypes) { @@ -2524,7 +2429,7 @@ sub build_search_response { $state = 'modify'; $response = &mt("$single{$srch->{'srchtype'}} was found for this $names{$srch->{'srchby'}} ([_1]) in $names{$srch->{'srchin'}}.",$srch->{'srchterm'}); } else { - $response = &mt("$nomatch{$srch->{'srchtype'}} found for this $names{$srch->{'srchby'}} ([_1]) in $names{$srch->{'srchin'}}.",$srch->{'srchterm'}); + $response = '<span class="LC_warning">'.&mt("$nomatch{$srch->{'srchtype'}} found for this $names{$srch->{'srchby'}} ([_1]) in $names{$srch->{'srchin'}}.",$srch->{'srchterm'}).'</span>'; if ($srch->{'srchin'} ne 'alc') { $forcenewuser = 1; my $cansrchinst = 0; @@ -2546,7 +2451,7 @@ sub build_search_response { } } } - $response .= '<br />'.&mt("To add as a new user:").'<ul><li>'.&mt("Enter the proposed username in the <i>'Search for'</i> box").'</li><li>'.&mt("Set <i>'Make new user if no match found</i>' to <b>Yes</b>").'</li><li>'.&mt("Click <i>'Search'</i>").'</li></ul>'.&mt("Note: you can only create new users in the domain of your current role -".$env{'request.role.domain'}).'<br /><br />'; + $response .= '<br />'.&mt("To add as a new user:").'<ul><li>'.&mt("Enter the proposed username in the <i>'Search for'</i> box").'</li><li>'.&mt("Set <i>'Make new user if no match found</i>' to <b>Yes</b>").'</li><li>'.&mt("Click <i>'Search'</i>").'</li></ul>'.&mt("Note: you can only create new users in the domain of your current role - [_1]",$env{'request.role.domain'}).'<br /><br />'; } } }