--- loncom/interface/lonsearchcat.pm 2001/03/20 12:21:56 1.43 +++ loncom/interface/lonsearchcat.pm 2001/03/21 12:19:53 1.60 @@ -51,6 +51,23 @@ my $scrout; my %metadatafields; my %cprtag; my %mimetag; +my $closebutton; +my $basicviewselect=< + + + + + +END +my $advancedviewselect=< + + + + + +END sub handler { my $r = shift; @@ -76,6 +93,10 @@ sub handler { END + $closebutton=< +END + # ------------------------------------------------ First, check out environment $metadatafields{'owner'}=$ENV{'user.name'}.'@'.$ENV{'user.domain'}; @@ -86,7 +107,7 @@ END { my $fh=Apache::File->new($r->dir_config('lonTabDir').'/language.tab'); map { - $_=~/(\w+)\s+([\w\s\-]+)/; + $_=~/(\w+)\s+([\w\s\-]+)/; chomp; $language{$1}=$2; } <$fh>; } @@ -96,7 +117,7 @@ END { my $fh=Apache::File->new($r->dir_config('lonIncludes').'/copyright.tab'); map { - $_=~/(\w+)\s+([\w\s\-]+)/; + $_=~/(\w+)\s+([\w\s\-]+)/; chomp; $cprtag{$1}=$2; } <$fh>; } @@ -106,7 +127,7 @@ END { my $fh=Apache::File->new($r->dir_config('lonTabDir').'/filetypes.tab'); map { - $_=~/(\w+)\s+(\w+)\s+([\w\s\-]+)/; + $_=~/(\w+)\s+(\w+)\s+([\w\s\-]+)/; chomp; $mimetag{$1}=".$1 $3"; } <$fh>; } @@ -248,7 +269,8 @@ ENDDOCUMENT
- +$closebutton +$basicviewselect


Advanced Search

@@ -256,7 +278,8 @@ $scrout

- +$closebutton +$advancedviewselect

@@ -448,7 +471,7 @@ sub selectbox { return $selout.''; } -# ------------------------------------------------ Performing a advanced search +# ----------------------------------------------- Performing an advanced search sub advancedsearch { my ($r,$envhash)=@_; my %ENV=%{$envhash}; @@ -468,13 +491,54 @@ sub advancedsearch { } my $query=''; -# my $concatarg=join('," ",', -# ('title', 'author', 'subject', 'notes', 'abstract')); - $query="select * from metadata where concat(title) like '\%$ENV{'form.title'}\%'"; - my $reply=&Apache::lonnet::metadata_query($query); + my @queries; + # Go through logical expression AND/OR/NOT phrase fields. - &output_results('Advanced',$r,$envhash,$reply); + foreach my $field ('title','author','subject','notes','abstract','url', + 'keywords','version','owner') { + if ($ENV{'form.'.$field}) { + push @queries,&build_SQL_query($field,$ENV{'form.'.$field}); + } + } + if ($ENV{'form.language'} and $ENV{'form.language'} ne 'any') { + push @queries,"(language like \"\%$ENV{'form.language'}\%\")"; + } + if ($ENV{'form.mime'} and $ENV{'form.mime'} ne 'any') { + push @queries,"(mime like \"\%$ENV{'form.mime'}\%\")"; + } + if ($ENV{'form.copyright'} and $ENV{'form.copyright'} ne 'any') { + push @queries,"(copyright like \"\%$ENV{'form.copyright'}\%\")"; + } + my $datequery=&build_date_queries( + $ENV{'form.creationdatestart_month'}, + $ENV{'form.creationdatestart_day'}, + $ENV{'form.creationdatestart_year'}, + $ENV{'form.creationdateend_month'}, + $ENV{'form.creationdateend_day'}, + $ENV{'form.creationdateend_year'}, + $ENV{'form.lastrevisiondatestart_month'}, + $ENV{'form.lastrevisiondatestart_day'}, + $ENV{'form.lastrevisiondatestart_year'}, + $ENV{'form.lastrevisiondateend_month'}, + $ENV{'form.lastrevisiondateend_day'}, + $ENV{'form.lastrevisiondateend_year'}, + ); + if ($datequery!~/^Incorrect/) { + push @queries,$datequery; + } + else { + &output_date_error($r,$datequery); + } + if (@queries) { + $query=join(" AND ",@queries); + $query="select * from metadata where $query"; + my $reply=&Apache::lonnet::metadata_query($query); + &output_results('Advanced',$r,$envhash,$query,$reply); + } + else { + &output_results('Advanced',$r,$envhash,$query); + } return OK; } @@ -505,10 +569,11 @@ sub basicsearch { $query="select * from metadata where concat($concatarg) like '\%$ENV{'form.basicexp'}\%'"; my $reply=&Apache::lonnet::metadata_query($query); - &output_results('Basic',$r,$envhash,$reply); + &output_results('Basic',$r,$envhash,$query,$reply); return OK; } +# ---------------- Message to output when there are not enough fields filled in sub output_blank_field_error { my ($r)=@_; # make query information persistent to allow for subsequent revision @@ -538,8 +603,7 @@ BEGINNING $persistent - +$closebutton

Helpful Message

@@ -555,8 +619,10 @@ RESULTS # ----------------------------- format and output results based on a reply list sub output_results { - my ($mode,$r,$envhash,@replylist)=@_; + my ($mode,$r,$envhash,$query,@replylist)=@_; my %ENV=%{$envhash}; + my $compiledresult=''; + foreach my $reply (@replylist) { my @results; @@ -566,7 +632,7 @@ sub output_results { $replyfile=$r->dir_config('lonDaemons').'/tmp/'.$1; $reply=~/(.*?)\_/; my $hostname=$1; - + sleep 3; # temporary fix, need to check for completion and status { while (1) { last if -e $replyfile; @@ -579,15 +645,16 @@ sub output_results { @results=<$fh>; } - my $compiledresult=''; - foreach my $result (@results) { + my @fields=map + {&Apache::lonnet::unescape($_)} + (split(/\,/,$result)); my ($title,$author,$subject,$url,$keywords,$version, $notes,$abstract,$mime,$lang, - $creationdate,$lastrevisiondate,$owner,$copyright - )=map {&Apache::lonnet::unescape($_)} (split(/\,/,$result)); + $creationdate,$lastrevisiondate,$owner,$copyright)=@fields; my $shortabstract=$abstract; $shortabstract=substr($abstract,0,200) if length($abstract)>200; + $fields[7]=$shortabstract; $compiledresult.=< END @@ -597,24 +664,31 @@ onClick="javascript:select_data('$title'
END - $compiledresult.=<URL: $url -
-Title: $title
-Author(s): $author
-Subject: $subject
-Keyword(s): $keywords
-Notes: $notes
-Abstract: $shortabstract
-MIME Type: $mimetag{$mime}
-Language: $language{$lang}
-Creation Date: $creationdate
-Last Revision Date: $lastrevisiondate
-Publisher/Owner: $owner
-Copyright/Distribution: $copyright
-Repository Location: $hostname -

-END + my $httphost=$ENV{'HTTP_HOST'}; + + my $viewselect; + if ($mode eq 'Basic') { + $viewselect=$ENV{'form.basicviewselect'}; + } + elsif ($mode eq 'Advanced') { + $viewselect=$ENV{'form.advancedviewselect'}; + } + + if ($viewselect eq 'Detailed Citation View') { + $compiledresult.=&detailed_citation_view(@fields, + $hostname,$httphost); + } + elsif ($viewselect eq 'Summary View') { + $compiledresult.=&summary_view(@fields,$hostname,$httphost); + } + elsif ($viewselect eq 'Fielded Format') { + $compiledresult.=&fielded_format_view(@fields,$hostname, + $httphost); + } + elsif ($viewselect eq 'XML/SGML') { + $compiledresult.=&xml_sgml_view(@fields,$hostname,$httphost); + } + } unless ($compiledresult) { @@ -665,8 +739,7 @@ SCRIPT
- +$closebutton $persistent

Search Query

@@ -677,13 +750,16 @@ RESULTS Basic search: $ENV{'form.basicexp'}

RESULTS + } elsif ($mode eq 'Advanced') { $r->print(< Advanced search +$query

RESULTS } + $r->print(<Search Results $compiledresult @@ -698,9 +774,10 @@ sub build_SQL_query { my $q=new Text::Query('abc', -parse => 'Text::Query::ParseAdvanced', -build => 'Text::Query::Build'); - $q->prepare($statement); + $q->prepare($logic_statement); my $matchexp=${$q}{'matchexp'}; chomp $matchexp; my $sql_query=&recursive_SQL_query_build($field_name,$matchexp); + return $sql_query; } # - Recursively parse a reverse notation expression into a SQL query expression @@ -710,7 +787,7 @@ sub recursive_SQL_query_build { return $pattern unless @matches; foreach my $match (@matches) { $match=~/\[ (\w+)\s(.*) \]/; - ($key,$value)=($1,$2); + my ($key,$value)=($1,$2); my $replacement=''; if ($key eq 'literal') { $replacement="($dkey like \"\%$value\%\")"; @@ -732,5 +809,157 @@ sub recursive_SQL_query_build { &recursive_SQL_query_build($dkey,$pattern); } +# ------------------------------------------------------ Detailed Citation View +sub detailed_citation_view { + my ($title,$author,$subject,$url,$keywords,$version, + $notes,$shortabstract,$mime,$lang, + $creationdate,$lastrevisiondate,$owner,$copyright, + $hostname,$httphost)=@_; + my $result=<$owner, last revised $lastrevisiondate +

$title

+

$author

+

+

+Subject: $subject
+Keyword(s): $keywords
+Notes: $notes
+MIME Type: $mimetag{$mime}
+Language: $language{$lang}
+Copyright/Distribution: $cprtag{$copyright}
+$shortabstract +

+END + return $result; +} + +# ---------------------------------------------------------------- Summary View +sub summary_view { + my ($title,$author,$subject,$url,$keywords,$version, + $notes,$shortabstract,$mime,$lang, + $creationdate,$lastrevisiondate,$owner,$copyright, + $hostname,$httphost)=@_; + my $result=<$author
+$title
+$owner -- $lastrevisiondate
+$cprtag{$copyright}
+

+END + return $result; +} + +# -------------------------------------------------------------- Fielded Format +sub fielded_format_view { + my ($title,$author,$subject,$url,$keywords,$version, + $notes,$shortabstract,$mime,$lang, + $creationdate,$lastrevisiondate,$owner,$copyright, + $hostname,$httphost)=@_; + my $result=<URL: $url +
+Title: $title
+Author(s): $author
+Subject: $subject
+Keyword(s): $keywords
+Notes: $notes
+MIME Type: $mimetag{$mime}
+Language: $language{$lang}
+Creation Date: $creationdate
+Last Revision Date: $lastrevisiondate
+Publisher/Owner: $owner
+Copyright/Distribution: $cprtag{$copyright}
+Repository Location: $hostname
+Abstract: $shortabstract
+

+END + return $result; +} + +# -------------------------------------------------------------------- XML/SGML +sub xml_sgml_view { + my ($title,$author,$subject,$url,$keywords,$version, + $notes,$shortabstract,$mime,$lang, + $creationdate,$lastrevisiondate,$owner,$copyright, + $hostname,$httphost)=@_; + my $result=< +<LonCapaResource> +<url>$url</url> +<title>$title</title> +<author>$author</author> +<subject>$subject</subject> +<keywords>$keywords</keywords> +<notes>$notes</notes> +<mimeInfo> +<mime>$mime</mime> +<mimetag>$mimetag{$mime}</mimetag> +</mimeInfo> +<languageInfo> +<language>$lang</language> +<languagetag>$language{$lang}</languagetag> +</languageInfo> +<creationdate>$creationdate</creationdate> +<lastrevisiondate>$lastrevisiondate</lastrevisiondate> +<owner>$owner</owner> +<copyrightInfo> +<copyright>$copyright</copyright> +<copyrighttag>$cprtag{$copyright}</copyrighttag> +</copyrightInfo> +<repositoryLocation>$hostname</repositoryLocation> +<shortabstract>$shortabstract</shortabstract> +</LonCapaResource> + +END + return $result; +} + +sub build_date_queries { + my ($cmonth1,$cday1,$cyear1,$cmonth2,$cday2,$cyear2, + $lmonth1,$lday1,$lyear1,$lmonth2,$lday2,$lyear2)=@_; + + return "Incorrect for some reason."; +} + +sub output_date_error { + my ($r,$message)=@_; + # 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 + +$closebutton +
+

Helpful Message

+

+$message +

+ + +RESULTS +} + 1; __END__