--- loncom/lonsql 2007/07/25 22:40:00 1.82 +++ loncom/lonsql 2007/08/25 19:52:11 1.86 @@ -3,7 +3,7 @@ # The LearningOnline Network # lonsql - LON TCP-MySQL-Server Daemon for handling database requests. # -# $Id: lonsql,v 1.82 2007/07/25 22:40:00 raeburn Exp $ +# $Id: lonsql,v 1.86 2007/08/25 19:52:11 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -372,7 +372,7 @@ sub make_new_child { $run = $run+1; my $userinput = <$client>; chomp($userinput); - $userinput=~s/\:(\w+)$//; + $userinput=~s/\:($LONCAPA::domain_re)$//; my $searchdomain=$1; # my ($conserver,$query, @@ -387,7 +387,7 @@ sub make_new_child { print $client "$queryid\n"; # # &logthis("QUERY: $query - $arg1 - $arg2 - $arg3 - $queryid"); - sleep 1; + # sleep 1; # my $result=''; # @@ -457,9 +457,13 @@ sub make_new_child { $query = "SELECT $fieldlist FROM allusers WHERE (domain = $quoted_dom AND "; if ($srchby eq 'lastfirst') { my ($fraglast,$fragfirst) = split(/,/,$srchterm); + $fragfirst =~ s/^\s+//; + $fraglast =~ s/\s+$//; if ($srchtype eq 'exact') { $query .= 'lastname = '.$dbh->quote($fraglast). ' AND firstname = '.$dbh->quote($fragfirst); + } elsif ($srchtype eq 'begins') { + $query .= 'lastname LIKE '.$dbh->quote($fraglast.'%').' AND firstname LIKE '.$dbh->quote($fragfirst.'%'); } else { $query .= 'lastname LIKE '.$dbh->quote('%'.$fraglast.'%').' AND firstname LIKE '.$dbh->quote('%'.$fragfirst.'%'); } @@ -470,6 +474,8 @@ sub make_new_child { ); if ($srchtype eq 'exact') { $query .= $srchfield{$srchby}.' = '.$dbh->quote($srchterm); + } elsif ($srchtype eq 'begins') { + $query .= $srchfield{$srchby}.' LIKE '.$dbh->quote($srchterm.'%'); } else { $query .= $srchfield{$srchby}.' LIKE '.$dbh->quote('%'.$srchterm.'%'); } @@ -492,6 +498,8 @@ sub make_new_child { 'WARNING: Could not retrieve from database:'. $sth->errstr().''); } + } elsif ($query eq 'instdirsearch') { + $result = &do_inst_dir_search($searchdomain,$arg1,$arg2,$arg3); } elsif ($query eq 'prepare activity log') { my ($cid,$domain) = map {&unescape($_);} ($arg1,$arg2); &logthis('preparing activity log tables for '.$cid); @@ -543,6 +551,30 @@ sub make_new_child { } } +sub do_inst_dir_search { + my ($domain,$srchby,$srchterm,$srchtype) = @_; + $srchby = &unescape($srchby); + $srchterm = &unescape($srchterm); + $srchtype = &unescape($srchtype); + my (%instusers,%instids,$result,$response); + eval { + local($SIG{__DIE__})='DEFAULT'; + $result=&localenroll::get_userinfo($domain,undef,undef,\%instusers, + \%instids,undef,$srchby,$srchterm, + $srchtype); + }; + if ($result eq 'ok') { + if (%instusers) { + foreach my $key (keys(%instusers)) { + my $usrstr = &Apache::lonnet::freeze_escape($instusers{$key}); + $response .=&escape(&escape($key).'='.$usrstr).'&'; + } + } + $response=~s/\&$//; + } + return $response; +} + ######################################################## ########################################################