--- loncom/interface/lonsearchcat.pm 2002/06/18 21:36:38 1.121
+++ loncom/interface/lonsearchcat.pm 2002/06/19 19:40:38 1.122
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Search Catalog
#
-# $Id: lonsearchcat.pm,v 1.121 2002/06/18 21:36:38 matthew Exp $
+# $Id: lonsearchcat.pm,v 1.122 2002/06/19 19:40:38 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -236,8 +236,8 @@ sub handler {
return OK if $r->header_only;
my $domain = $r->dir_config('lonDefDomain');
- $diropendb= "/home/httpd/perl/tmp/".&Apache::lonnet::unescape($domain).
- "\_".&Apache::lonnet::unescape($ENV{'user.name'})."_searchcat.db";
+ $diropendb= "/home/httpd/perl/tmp/".&Apache::lonnet::escape($domain).
+ "\_".&Apache::lonnet::escape($ENV{'user.name'})."_searchcat.db";
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['catalogmode','launch','acts','mode','form','element']);
@@ -246,8 +246,7 @@ sub handler {
if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) {
&start_fresh_session();
untie %hash;
- }
- else {
+ } else {
$r->print('
Unable to tie hash to db '.
'file');
return OK;
@@ -488,13 +487,12 @@ ENDDOCUMENT
Returns a scalar which holds the current ENV{'form.*'} values in
a 'hidden' html input tag.
+
=cut
######################################################################
######################################################################
-# ------------------------------------------------------------- make persistent
-
sub make_persistent {
my $persistent='';
@@ -512,31 +510,73 @@ END
return $persistent;
}
-# --------------------------------------------------------- Various form fields
+
+######################################################################
+######################################################################
+
+=pod
+
+=item HTML form building functions
+
+=over 4
+
+=item &simpletextfield()
+
+Inputs: $name,$value,$size
+
+Returns a text input field with the given name, value, and size.
+If size is not specified, a value of 20 is used.
+
+=item &simplecheckbox()
+
+Inputs: $name,$value
+
+Returns a simple check box with the given $name.
+If $value eq 'on' the box is checked.
+
+=item &searchphrasefield()
+
+Inputs: $title,$name,$value
+
+Returns html for a title line and an input field for entering search terms.
+the instructions "Enter terms or phrases separated by search operators such
+as AND, OR, or NOT." are given following the title. The entry field (which
+is where the $name and $value are used) is an 80 column simpletextfield.
+
+=item &dateboxes()
+
+=item &selectbox()
+
+=back
+
+=cut
+
+######################################################################
+######################################################################
sub simpletextfield {
- my ($name,$value)=@_;
- return '$uctitle: ".
- " $instruction ".
- ' ';
+ return "\n".
+ ''.$uctitle.': '.
+ " $instruction ".&simpletextfield($name,$value,80);
}
sub dateboxes {
@@ -586,26 +626,35 @@ END
sub selectbox {
my ($title,$name,$value,$anyvalue,$anytag,$functionref,@idlist)=@_;
my $uctitle=uc($title);
- my $selout="\n
$uctitle:".
- " ".'';
+ my $selout="\n".''.
+ ''.$uctitle.': ';
foreach ($anyvalue,@idlist) {
- $selout.=''.&{$functionref}($_).' ';
+ $selout.=' selected >'.&{$functionref}($_).'';
}
elsif ($_ eq $value and /^$anyvalue$/) {
- $selout.=' selected>'.$anytag.'';
+ $selout.=' selected >'.$anytag.'';
}
else {$selout.='>'.&{$functionref}($_).'';}
}
return $selout.' ';
}
-# ----------------------------------------------- Performing an advanced search
+######################################################################
+######################################################################
+
+=pod
+
+=item &advancedsearch()
+
+=cut
+
+######################################################################
+######################################################################
sub advancedsearch {
my ($r,$envhash)=@_;
my %ENV=%{$envhash};
-
my $fillflag=0;
# Clean up fields for safety
for my $field ('title','author','subject','keywords','url','version',
@@ -637,11 +686,8 @@ sub advancedsearch {
&output_blank_field_error($r);
return OK;
}
-
-
# Turn the form input into a SQL-based query
my $query='';
-
my @queries;
# Evaluate logical expression AND/OR/NOT phrase fields.
foreach my $field ('title','author','subject','notes','abstract','url',
@@ -683,7 +729,6 @@ sub advancedsearch {
elsif ($datequery) {
push @queries,$datequery;
}
-
# Process form information for custom metadata querying
my $customquery='';
if ($ENV{'form.custommetadata'}) {
@@ -723,7 +768,17 @@ sub advancedsearch {
return 'Error. Should not have gone to this point.';
}
-# --------------------------------------------------- Performing a basic search
+######################################################################
+######################################################################
+
+=pod
+
+=item &basicsearch()
+
+=cut
+
+######################################################################
+######################################################################
sub basicsearch {
my ($r,$envhash)=@_;
my %ENV=%{$envhash};
@@ -762,7 +817,18 @@ sub basicsearch {
return OK;
}
-# ------------------------------------------------------------- build_SQL_query
+
+######################################################################
+######################################################################
+
+=pod
+
+=item &build_SQL_query()
+
+=cut
+
+######################################################################
+######################################################################
sub build_SQL_query {
my ($field_name,$logic_statement)=@_;
my $q=new Text::Query('abc',
@@ -774,9 +840,21 @@ sub build_SQL_query {
return $sql_query;
}
-# ------------------------------------------------- build custom metadata query
+######################################################################
+######################################################################
+
+=pod
+
+=item &build_custommetadata_query()
+
+=cut
+
+######################################################################
+######################################################################
sub build_custommetadata_query {
my ($field_name,$logic_statement)=@_;
+ &Apache::lonnet::logthis("Entered build_custommetadata_query:".
+ $field_name.':'.$logic_statement);
my $q=new Text::Query('abc',
-parse => 'Text::Query::ParseAdvanced',
-build => 'Text::Query::BuildAdvancedString');
@@ -784,12 +862,28 @@ sub build_custommetadata_query {
my $matchexp=${$q}{'-parse'}{'-build'}{'matchstring'};
# quick fix to change literal into xml tag-matching
# will eventually have to write a separate builder module
- my $oldmatchexp=$matchexp;
- $matchexp=~s/(\w+)\\=([\w\\\+]+)/\\<$1\\>\[\^\\<\]\*$2\[\^\\<\]\*\\<\\\/$1\\>/g;
+ # wordone=wordtwo becomes\[^\<] *wordtwo[^\<]*\<\/wordone\>
+ $matchexp =~ s/(\w+)\\=([\w\\\+]+)?# wordone=wordtwo is changed to
+ /\\<$1\\>?# \
+ \[\^\\<\]?# [^\<]
+ \*$2\[\^\\<\]?# *wordtwo[^\<]
+ \*\\<\\\/$1\\>?# *\<\/wordone\>
+ /g;
+ &Apache::lonnet::logthis("match expression: ".$matchexp);
return $matchexp;
}
-# - Recursively parse a reverse notation expression into a SQL query expression
+######################################################################
+######################################################################
+
+=pod
+
+=item &recursive_SQL_query_build()
+
+=cut
+
+######################################################################
+######################################################################
sub recursive_SQL_query_build {
my ($dkey,$pattern)=@_;
my @matches=($pattern=~/(\[[^\]|\[]*\])/g);
@@ -823,7 +917,17 @@ sub recursive_SQL_query_build {
&recursive_SQL_query_build($dkey,$pattern);
}
-# ------------------------------------------------------------ Build date query
+######################################################################
+######################################################################
+
+=pod
+
+=item &build_date_queries()
+
+=cut
+
+######################################################################
+######################################################################
sub build_date_queries {
my ($cmonth1,$cday1,$cyear1,$cmonth2,$cday2,$cyear2,
$lmonth1,$lday1,$lyear1,$lmonth2,$lday2,$lyear2)=@_;
@@ -872,11 +976,23 @@ sub build_date_queries {
return '';
}
-# ----------------------------- format and output results based on a reply list
-# There are two windows that this function writes to. The main search
-# window ("srch") has a listing of the results. A secondary window ("popwin")
-# gives the status of the network search (time elapsed, number of machines
-# contacted, etc.)
+######################################################################
+######################################################################
+
+=pod
+
+=item &output_results()
+
+Format and output results based on a reply list.
+There are two windows that this function writes to. The main search
+window ("srch") has a listing of the results. A secondary window ("popwin")
+gives the status of the network search (time elapsed, number of machines
+contacted, etc.)
+
+=cut
+
+######################################################################
+######################################################################
sub output_results {
my $fnum; # search result counter
my ($mode,$r,$envhash,$query,$replyref)=@_;
@@ -1336,7 +1452,27 @@ RESULTS
RESULTS
}
-# ------------------------------------------------------ Detailed Citation View
+######################################################################
+######################################################################
+
+=pod
+
+=item Metadata Viewing Functions
+
+Output is a HTML-ified string.
+Input arguments are title, author, subject, url, keywords, version,
+notes, short abstract, mime, language, creation date,
+last revision date, owner, copyright, hostname, httphost, and
+extra custom metadata to show.
+
+=over 4
+
+=item &detailed_citation_view()
+
+=cut
+
+######################################################################
+######################################################################
sub detailed_citation_view {
my ($title,$author,$subject,$url,$keywords,$version,
$notes,$shortabstract,$mime,$lang,
@@ -1375,7 +1511,17 @@ END
return $result;
}
-# ---------------------------------------------------------------- Summary View
+######################################################################
+######################################################################
+
+=pod
+
+=item &summary_view()
+
+=cut
+
+######################################################################
+######################################################################
sub summary_view {
my ($title,$author,$subject,$url,$keywords,$version,
$notes,$shortabstract,$mime,$lang,
@@ -1393,7 +1539,17 @@ END
return $result;
}
-# -------------------------------------------------------------- Fielded Format
+######################################################################
+######################################################################
+
+=pod
+
+=item &fielded_format_view()
+
+=cut
+
+######################################################################
+######################################################################
sub fielded_format_view {
my ($title,$author,$subject,$url,$keywords,$version,
$notes,$shortabstract,$mime,$lang,
@@ -1424,7 +1580,19 @@ END
return $result;
}
-# -------------------------------------------------------------------- XML/SGML
+######################################################################
+######################################################################
+
+=pod
+
+=item &xml_sgml_view()
+
+=back
+
+=cut
+
+######################################################################
+######################################################################
sub xml_sgml_view {
my ($title,$author,$subject,$url,$keywords,$version,
$notes,$shortabstract,$mime,$lang,
@@ -1466,7 +1634,17 @@ END
return $result;
}
-# ---------------------------------------------------- see if a field is filled
+######################################################################
+######################################################################
+
+=pod
+
+=item &filled() see if field is filled.
+
+=cut
+
+######################################################################
+######################################################################
sub filled {
my ($field)=@_;
if ($field=~/\S/ && $field ne 'any') {
@@ -1477,7 +1655,17 @@ sub filled {
}
}
-# ---------------- Message to output when there are not enough fields filled in
+######################################################################
+######################################################################
+
+=pod
+
+=item &output_blank_field_error()
+
+=cut
+
+######################################################################
+######################################################################
sub output_blank_field_error {
my ($r)=@_;
# make query information persistent to allow for subsequent revision
@@ -1511,18 +1699,28 @@ processed.
RESULTS
}
-# ----------------------------------------------------------- Output date error
+######################################################################
+######################################################################
+
+=pod
+
+=item &output_date_error()
+
+Output a full html page with an error message.
+
+=cut
+
+######################################################################
+######################################################################
sub output_date_error {
my ($r,$message)=@_;
# make query information persistent to allow for subsequent revision
my $persistent=&make_persistent();
- $r->print(<print(<
The LearningOnline Network with CAPA
-BEGINNING
- $r->print(<
@@ -1542,7 +1740,20 @@ $message
RESULTS
}
-# --------- settings whenever the user causes the search window to be launched
+######################################################################
+######################################################################
+
+=pod
+
+=item &start_fresh_session()
+
+Cleans the global %hash by removing all fields which begin with
+'pre_' or 'store'.
+
+=cut
+
+######################################################################
+######################################################################
sub start_fresh_session {
delete $hash{'mode_catalog'};
foreach (keys %hash) {
@@ -1555,7 +1766,17 @@ sub start_fresh_session {
}
}
-# ----------------------------------------------- send javascript to popwin
+######################################################################
+######################################################################
+
+=pod
+
+=item &popwin_js() send javascript to popwin
+
+=cut
+
+######################################################################
+######################################################################
sub popwin_js {
# Print javascript out to popwin, but make sure we dont generate
# any javascript errors in doing so.
@@ -1570,6 +1791,17 @@ END
$r->rflush();
}
+######################################################################
+######################################################################
+
+=pod
+
+=item &popwin_imgupdate()
+
+=cut
+
+######################################################################
+######################################################################
sub popwin_imgupdate {
my ($r,$imgnum,$icon) = @_;
&popwin_js($r,'popwin.document.img'.$imgnum.'.'.
@@ -1774,8 +2006,8 @@ more fields need to be filled in
=item *
-output_date_error(server reference, error message) : outputs
-an error message specific to bad date format.
+output_date_error(server reference, error message) :
+
=back