--- loncom/interface/loncreateuser.pm 2007/08/26 21:09:43 1.179 +++ loncom/interface/loncreateuser.pm 2007/09/12 23:26:25 1.184 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Create a user # -# $Id: loncreateuser.pm,v 1.179 2007/08/26 21:09:43 raeburn Exp $ +# $Id: loncreateuser.pm,v 1.184 2007/09/12 23:26:25 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -699,12 +699,14 @@ ENDFORMINFO if (($instsrch->{'srchterm'} ne '') && ($instsrch->{'srchdomain'} ne '')) { $newuser = $instsrch->{'srchterm'}.':'.$instsrch->{'srchdomain'}; } - my (%dirsrch_results,%inst_results); + my (%dirsrch_results,%inst_results,$dirsrchres); if ($newuser) { if (&directorysrch_check($instsrch) eq 'ok') { - %dirsrch_results = &Apache::lonnet::inst_directory_query($instsrch); - if (ref($dirsrch_results{$newuser}) eq 'HASH') { - %inst_results = %{$dirsrch_results{$newuser}}; + ($dirsrchres,%dirsrch_results) = &Apache::lonnet::inst_directory_query($instsrch); + if ($dirsrchres eq 'ok') { + if (ref($dirsrch_results{$newuser}) eq 'HASH') { + %inst_results = %{$dirsrch_results{$newuser}}; + } } } } @@ -1357,7 +1359,7 @@ sub update_user_data { ($env{'form.ccdomain'},$env{'form.ccuname'},$env{'form.cstid'}, $amode,$genpwd,$env{'form.cfirst'}, $env{'form.cmiddle'},$env{'form.clast'},$env{'form.cgen'}, - undef,$desiredhost + undef,$desiredhost,$env{'form.cemail'} ); $r->print(&mt('Generating user').': '.$result); my $home = &Apache::lonnet::homeserver($env{'form.ccuname'}, @@ -2211,10 +2213,8 @@ sub user_search_result { my %allhomes; my %inst_matches; my %srch_results; - my ($response,$currstate,$forcenewuser); - $srch->{'srchterm'} =~ s/^\s+//; - $srch->{'srchterm'} =~ s/\s+$//; - + my ($response,$currstate,$forcenewuser,$dirsrchres); + $srch->{'srchterm'} =~ s/\s+/ /g; if ($srch->{'srchby'} !~ /^(uname|lastname|lastfirst)$/) { $response = &mt('Invalid search.'); } @@ -2227,6 +2227,9 @@ sub user_search_result { if ($srch->{'srchterm'} eq '') { $response = &mt('You must enter a search term.'); } + if ($srch->{'srchterm'} =~ /^\s+$/) { + $response = &mt('Your search term must contain more than just spaces.'); + } if (($srch->{'srchin'} eq 'dom') || ($srch->{'srchin'} eq 'instd')) { if (($srch->{'srchdomain'} eq '') || ! (&Apache::lonnet::domain($srch->{'srchdomain'}))) { @@ -2241,14 +2244,18 @@ sub user_search_result { } } } + if ($response ne '') { + $response = ''.$response.''; + } if ($srch->{'srchin'} eq 'instd') { my $instd_chk = &directorysrch_check($srch); if ($instd_chk ne 'ok') { - $response = $instd_chk; + $response = ''.$instd_chk.''. + '
'.&mt('You may want to search in the LON-CAPA domain instead of the institutional directory.').'

'; } } if ($response ne '') { - return ($currstate,''.$response.''); + return ($currstate,$response); } if ($srch->{'srchby'} eq 'uname') { if (($srch->{'srchin'} eq 'dom') || ($srch->{'srchin'} eq 'crs')) { @@ -2257,7 +2264,8 @@ sub user_search_result { my $uhome=&Apache::lonnet::homeserver($srch->{'srchterm'},$srch->{'srchdomain'}); if ($uhome eq 'no_host') { my $domdesc = &Apache::lonnet::domain($env{'request.role.domain'},'description'); - $response = &mt('New users can only be created in the domain to which you current role belongs - [_1].',$env{'request.role.domain'}.' ('.$domdesc.')'); + my $showdom = &display_domain_info($env{'request.role.domain'}); + $response = &mt('New users can only be created in the domain to which your current role belongs - [_1].',$showdom); } else { $currstate = 'modify'; } @@ -2319,9 +2327,18 @@ sub user_search_result { } elsif ($srch->{'srchin'} eq 'alc') { $currstate = 'query'; } elsif ($srch->{'srchin'} eq 'instd') { - %srch_results = &Apache::lonnet::inst_directory_query($srch); - ($currstate,$response,$forcenewuser) = - &build_search_response($srch,%srch_results); + ($dirsrchres,%srch_results) = &Apache::lonnet::inst_directory_query($srch); + if ($dirsrchres eq 'ok') { + ($currstate,$response,$forcenewuser) = + &build_search_response($srch,%srch_results); + } else { + my $showdom = &display_domain_info($srch->{'srchdomain'}); + $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.'). + '

'; + } } } else { if ($srch->{'srchin'} eq 'dom') { @@ -2383,9 +2400,17 @@ sub user_search_result { } elsif ($srch->{'srchin'} eq 'alc') { $currstate = 'query'; } elsif ($srch->{'srchin'} eq 'instd') { - %srch_results = &Apache::lonnet::inst_directory_query($srch); - ($currstate,$response,$forcenewuser) = - &build_search_response($srch,%srch_results); + ($dirsrchres,%srch_results) = &Apache::lonnet::inst_directory_query($srch); + if ($dirsrchres eq 'ok') { + ($currstate,$response,$forcenewuser) = + &build_search_response($srch,%srch_results); + } else { + my $showdom = &display_domain_info($srch->{'srchdomain'}); $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.'). + '

'; + } } } return ($currstate,$response,$forcenewuser,\%srch_results); @@ -2397,13 +2422,14 @@ sub directorysrch_check { my $response; my %dom_inst_srch = &Apache::lonnet::get_dom('configuration', ['directorysrch'],$srch->{'srchdomain'}); + my $showdom = &display_domain_info($srch->{'srchdomain'}); if (ref($dom_inst_srch{'directorysrch'}) eq 'HASH') { if (!$dom_inst_srch{'directorysrch'}{'available'}) { - return &mt('Institutional directory search unavailable in domain: [_1]',$srch->{'srchdomain'}); + return &mt('Institutional directory search is not available in domain: [_1]',$showdom); } if ($dom_inst_srch{'directorysrch'}{'localonly'}) { if ($env{'request.role.domain'} ne $srch->{'srchdomain'}) { - return &mt('Insitutional directory search in domain: [_1] is only allowed for users with a current role in the domain.',$srch->{'srchdomain'}); + return &mt('Institutional directory search in domain: [_1] is only allowed for users with a current role in the domain.',$showdom); } my @usertypes = split(/:/,$env{'environment.inststatus'}); if (!@usertypes) { @@ -2424,13 +2450,13 @@ sub directorysrch_check { push (@longtypes,$insttypes->{$item}); } my $insttype_str = join(', ',@longtypes); - return &mt('Directory search in domain: [_1] is unavailable to your user type: ',$srch->{'srchdomain'}).$insttype_str; + return &mt('Institutional directory search in domain: [_1] is not available to your user type: ',$showdom).$insttype_str; } } else { $can_search = 1; } } else { - return &mt('Directory search has not been configured for domain: [_1]',$srch->{'srchdomain'}); + return &mt('Institutional directory search has not been configured for domain: [_1]',$showdom); } my %longtext = &Apache::lonlocal::texthash ( uname => 'username', @@ -2443,10 +2469,10 @@ sub directorysrch_check { if ($can_search) { if (ref($dom_inst_srch{'directorysrch'}{'searchby'}) eq 'ARRAY') { if (!grep(/^\Q$srch->{'srchby'}\E$/,@{$dom_inst_srch{'directorysrch'}{'searchby'}})) { - return &mt('Directory search in domain: [_1] is not available for searching by "[_2]"',$srch->{'srchdomain'},$longtext{$srch->{'srchby'}}); + return &mt('Institutional directory search in domain: [_1] is not available for searching by "[_2]"',$showdom,$longtext{$srch->{'srchby'}}); } } else { - return &mt('Directory search in domain: [_1] is not available.', $srch->{'srchdomain'}); + return &mt('Institutional directory search in domain: [_1] is not available.', $showdom); } } if ($can_search) { @@ -2454,7 +2480,7 @@ sub directorysrch_check { if (grep(/^\Q$srch->{'srchtype'}\E/,@{$dom_inst_srch{'directorysrch'}{'searchtypes'}})) { return 'ok'; } else { - return &mt('Directory search in domain [_1] is not available for the requested search type: "[_2]"',$srch->{'srchdomain'},$longtext{$srch->{'srchtype'}}); + return &mt('Institutional directory search in domain [_1] is not available for the requested search type: "[_2]"',$showdom,$longtext{$srch->{'srchtype'}}); } } else { if ((($dom_inst_srch{'directorysrch'}{'searchtypes'} eq 'specify') && @@ -2462,7 +2488,7 @@ sub directorysrch_check { ($dom_inst_srch{'directorysrch'}{'searchtypes'} eq $srch->{'srchtype'})) { return 'ok'; } else { - return &mt('Directory search in domain [_1] is not available for the requested search type: "[_2]"',$srch->{'srchdomain'},$longtext{$srch->{'srchtype'}}); + return &mt('Institutional directory search in domain [_1] is not available for the requested search type: "[_2]"',$showdom,$longtext{$srch->{'srchtype'}}); } } } @@ -2491,26 +2517,35 @@ sub build_search_response { 'lastname' => 'last name', 'lastfirst' => 'last name, first name', 'crs' => 'this course', - 'dom' => 'this domain', - 'instd' => "your institution's directory", + 'dom' => 'LON-CAPA domain: ', + 'instd' => 'the institutional directory for domain: ', ); my %single = ( + begins => 'A match', contains => 'A match', - exact => 'An exact match', + exact => 'An exact match', ); my %nomatch = ( + begins => 'No match', contains => 'No match', - exact => 'No exact match', + exact => 'No exact match', ); if (keys(%srch_results) > 1) { $currstate = 'select'; } else { if (keys(%srch_results) == 1) { $currstate = 'modify'; - $response = &mt("$single{$srch->{'srchtype'}} was found for this $names{$srch->{'srchby'}} ([_1]) in $names{$srch->{'srchin'}}.",$srch->{'srchterm'}); + $response = &mt("$single{$srch->{'srchtype'}} was found for the $names{$srch->{'srchby'}} ([_1]) in $names{$srch->{'srchin'}}.",$srch->{'srchterm'}); + if ($srch->{'srchin'} eq 'dom' || $srch->{'srchin'} eq 'instd') { + $response .= &display_domain_info($srch->{'srchdomain'}); + } } else { - $response = ''.&mt("$nomatch{$srch->{'srchtype'}} found for this $names{$srch->{'srchby'}} ([_1]) in $names{$srch->{'srchin'}}.",$srch->{'srchterm'}).''; + $response = ''.&mt("$nomatch{$srch->{'srchtype'}} found for the $names{$srch->{'srchby'}} ([_1]) in $names{$srch->{'srchin'}}",$srch->{'srchterm'}); + if ($srch->{'srchin'} eq 'dom' || $srch->{'srchin'} eq 'instd') { + $response .= &display_domain_info($srch->{'srchdomain'}); + } + $response .= ''; if ($srch->{'srchin'} ne 'alc') { $forcenewuser = 1; my $cansrchinst = 0; @@ -2522,22 +2557,38 @@ sub build_search_response { } } } - if (($srch->{'srchby'} eq 'lastfirst') || - ($srch->{'srchby'} eq 'lastname')) { - if ($srch->{'srchin'} eq 'crs') { - $response .= '
'.&mt('You may want to broaden your search to the whole domain.'); - } elsif ($srch->{'srchin'} eq 'dom') { - if ($cansrchinst) { - $response .= '
'.&mt('You may want to broaden your search to a search of the institutional directory for this domain.'); - } + if ((($srch->{'srchby'} eq 'lastfirst') || + ($srch->{'srchby'} eq 'lastname')) && + ($srch->{'srchin'} eq 'dom')) { + if ($cansrchinst) { + $response .= '
'.&mt('You may want to broaden your search to a search of the institutional directory for the domain.'); } } + if ($srch->{'srchin'} eq 'crs') { + $response .= '
'.&mt('You may want to broaden your search to the selected LON-CAPA domain.'); + } + } + if (!($srch->{'srchby'} eq 'uname' && $srch->{'srchin'} eq 'dom' && $srch->{'srchtype'} eq 'exact' && $srch->{'srchdomain'} eq $env{'request.role.domain'})) { + 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'}).'
'; } } } return ($currstate,$response,$forcenewuser); } +sub display_domain_info { + my ($dom) = @_; + my $output = $dom; + if ($dom ne '') { + my $domdesc = &Apache::lonnet::domain($dom,'description'); + if ($domdesc ne '') { + $output .= ' ('.$domdesc.')'; + } + } + return $output; +} + sub crumb_utilities { my %elements = ( crtuser => {