--- loncom/interface/lonsearchcat.pm 2001/03/15 18:23:54 1.17 +++ loncom/interface/lonsearchcat.pm 2001/03/15 18:43:30 1.18 @@ -79,6 +79,9 @@ END if ($ENV{'form.basicsubmit'} eq 'SEARCH') { return &basicsearch($r,$ENV{'form.basicexp'}); } + elsif ($ENV{'form.advancedsubmit'} eq 'SEARCH') { + return &advancedsearch($r,\%ENV); + } $scrout=''; # building a part of screen output $scrout.=&searchphrasefield('Limit by title','title', @@ -416,54 +419,68 @@ sub selectbox { return $selout.''; } +# ------------------------------------------------ Performing a advanced search +sub advancedsearch { + my ($r,$envhash)=@_; + my %ENV=%{$envhash}; + +} + # --------------------------------------------------- Performing a basic search sub basicsearch { my ($r,$expression)=@_; my $query=$expression; $query="select * from metadata where concat(title,\" \",author) like '\%$expression\%'"; -# my $reply=&Apache::lonnet::reply("querysend:$query",'msul3'); my $reply=&Apache::lonnet::metadata_query($query); + &output_results($reply); + return OK; +} - my @results; - - my $replyfile=''; - $reply=~/^([\.\w]+)$/; # must do since 'use strict' checks for tainting - $replyfile=$r->dir_config('lonDaemons').'/tmp/'.$1; - $reply=~/(.*?)\_/; - my $hostname=$1; - - { - while (1) { - last if -e $replyfile; - sleep 1; +# ----------------------------- format and output results based on a reply list +sub output_results { + my (@replylist)=@_; + foreach my $reply (@replylist) { + + my @results; + + my $replyfile=''; + $reply=~/^([\.\w]+)$/; # must do since 'use strict' checks for tainting + $replyfile=$r->dir_config('lonDaemons').'/tmp/'.$1; + $reply=~/(.*?)\_/; + my $hostname=$1; + + { + while (1) { + last if -e $replyfile; + sleep 1; + } + # QUESTION: how should I handle this error condition.. + # I'm sure there is syntax elsewhere I can use.. + my $fh=Apache::File->new($replyfile) or + ($r->print('file cannot be opened') and return OK); + @results=<$fh>; } - # QUESTION: how should I handle this error condition.. - # I'm sure there is syntax elsewhere I can use.. - my $fh=Apache::File->new($replyfile) or - ($r->print('file cannot be opened') and return OK); - @results=<$fh>; - } - my $compiledresult=''; + my $compiledresult=''; - foreach my $result (@results) { - my ($title,$author,$subject,$url,$keywords,$version, - $notes,$abstract,$mime,$lang, - $creationdate,$lastrevisiondate,$owner,$copyright - )=map {&Apache::lonnet::unescape($_)} (split(/\,/,$result)); - my $shortabstract=$abstract; - $shortabstract=substr($abstract,0,200) if length($abstract)>200; - $compiledresult.=<200; + $compiledresult.=< END - $compiledresult.=<
END - $compiledresult.=<URL: $url
Title: $title
@@ -481,31 +498,31 @@ END Repository Location: $hostname

END -} + } - unless ($compiledresult) { - $compiledresult="There were no results that matched your query"; - } + unless ($compiledresult) { + $compiledresult="There were no results that matched your query"; + } - # make query information persistent to allow for subsequent revision - my $persistent=''; - map { - if (/^form\./ && !/submit/) { - my $name=$_; - my $key=$name; - $name=~s/^form\.//; - $persistent.=< END - } - } (keys %ENV); + } + } (keys %ENV); - $r->print(<print(< The LearningOnline Network with CAPA BEGINNING - $r->print(<print(< function select_data(title,url) { changeTitle(title); @@ -523,7 +540,7 @@ BEGINNING } SCRIPT - $r->print(<print(< @@ -544,8 +561,7 @@ $compiledresult RESULTS - - return OK; + } } 1;