--- loncom/interface/lonsearchcat.pm 2001/03/15 13:40:20 1.12 +++ loncom/interface/lonsearchcat.pm 2001/03/15 19:16:42 1.22 @@ -77,7 +77,10 @@ END } if ($ENV{'form.basicsubmit'} eq 'SEARCH') { - return &basicsearch($r,$ENV{'form.basicexp'}); + return &basicsearch($r,\%ENV); + } + elsif ($ENV{'form.advancedsubmit'} eq 'SEARCH') { + return &advancedsearch($r,\%ENV); } $scrout=''; # building a part of screen output @@ -167,6 +170,19 @@ LASTREVISIONDATEEND $scrout.=&selectbox('Limit by copyright/distribution','copyright', $ENV{'form.copyright'},%cprtag); +# ------------------------------------------- Compute customized metadata field + $scrout.=< +LIMIT BY OTHER METADATA FIELDS: + +For author-specific metadata, enter in an expression in the form of +key=value separated by operators such as AND or OR.
+Example: grandmother=75 OR grandfather=85 +
+CUSTOMMETADATA +$scrout.=&simpletextfield('custommetadata',$ENV{'form.custommetadata'}); +$scrout.=' initial users of this system do not need to worry about this option'; + # ---------------------------------------------------------------- Print screen $r->print(< @@ -403,55 +419,122 @@ sub selectbox { return $selout.''; } +# ------------------------------------------------ Performing a advanced search +sub advancedsearch { + my ($r,$envhash)=@_; + my %ENV=%{$envhash}; + + return <<(END); +Advanced searching is not yet implemented. +END + +} + # --------------------------------------------------- Performing a basic search sub basicsearch { - my ($r,$expression)=@_; + my ($r,$envhash)=@_; + my %ENV=%{$envhash}; + + &output_blank_field_error($r) unless length($ENV{'form.basicexp'}); + + my $query=$ENV{'form.basicexp'}; + $query="select * from metadata where concat(title,\" \",author) like '\%$ENV{'form.basicexp'}\%'"; + my $reply=&Apache::lonnet::metadata_query($query); + &output_results($r,$envhash,$reply); + return OK; +} + +sub output_blank_field_error { + my ($r)=@_; + # 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); + + $r->print(< + +The LearningOnline Network with CAPA +BEGINNING + $r->print(< + + +

Search Catalog

+
+$persistent + + +
+

Helpful Message

+

+Incorrect search query due to blank entry fields. +You need to fill in the relevant +fields on the search page in order for a query to be +processed. +

+ + +RESULTS +} - 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("querysend:$query",'msul3'); - - 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 ($r,$envhash,@replylist)=@_; + my %ENV=%{$envhash}; + 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
+ $compiledresult.=<URL: $url +
Title: $title
Author(s): $author
Subject: $subject
@@ -467,31 +550,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); @@ -509,7 +592,7 @@ BEGINNING } SCRIPT - $r->print(<print(< @@ -523,15 +606,14 @@ $persistent

Search Query

-Basic search: $expression +Basic search: $ENV{'form.basicexp'}

Search Results

$compiledresult RESULTS - - return OK; + } } 1;