--- loncom/interface/lonsearchcat.pm 2001/03/08 16:55:43 1.5
+++ loncom/interface/lonsearchcat.pm 2001/03/22 14:00:55 1.69
@@ -2,36 +2,112 @@
# Search Catalog
#
# 03/08/2001 Scott Harrison
+# Scott Harrison: 03/12/2001, 03/13/2001, 03/14/2001, 03/15/2001, 03/19/2001
+# Scott Harrison: 03/20/2001
#
+# Functions
+#
+# handler(server reference) : interacts with the Apache server layer
+# (for /adm/searchcat URLs)
+# simpletextfield(name,value) : returns HTML formatted string for simple text
+# field
+# simplecheckbox(name,value) : returns HTML formatted string for simple
+# checkbox
+# searchphrasefield(title,name,value) : returns HTML formatted string for
+# a search expression phrase field
+# dateboxes(name, defaultmonth, defaultday, defaultyear) : returns HTML
+# formatted string
+# for a calendar date
+# selectbox(title,name,value,%HASH=options) : returns HTML formatted string for
+# a selection box field
+# advancedsearch(server reference, environment reference) : perform a complex
+# multi-field logical query
+# filled(field) : determines whether a given field has been filled
+# basicsearch(server reference, environment reference) : perform a simple
+# single-field logical query
+# output_blank_field_error(server reference) : outputs a message saying that
+# more fields need to be filled in
+# output_results(output mode,
+# server reference,
+# environment reference,
+# reply list reference) : outputs results from search
+# build_SQL_query(field name, logic) : builds a SQL query string from a
+# logical expression with AND/OR keywords
+# recursive_SQL_query_build(field name, reverse notation expression) :
+# builds a SQL query string from a reverse notation expression
+# logical expression with AND/OR keywords
+
package Apache::lonsearchcat;
use strict;
use Apache::Constants qw(:common);
+use Apache::lonnet();
+use Apache::File();
+use CGI qw(:standard);
+use Text::Query;
my %language;
my $scrout;
my %metadatafields;
my %cprtag;
my %mimetag;
+my $closebutton;
+my $basicviewselect=<
+
+
+
+
+
+END
+my $advancedviewselect=<
+
+
+
+
+
+END
sub handler {
my $r = shift;
+
+# -------------------------------------- see if called from an interactive mode
+ map {
+ my ($name, $value) = split(/=/,$_);
+ $value =~ tr/+/ /;
+ $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
+ if ($name eq 'catalogmode') {
+ $ENV{'form.'.$name}=$value;
+ }
+ } (split(/&/,$ENV{'QUERY_STRING'}));
+
$r->content_type('text/html');
$r->send_http_header;
return OK if $r->header_only;
%metadatafields=();
+ my $hidden='';
+ $hidden=<
+END
+
+ $closebutton=<
+END
+
# ------------------------------------------------ First, check out environment
$metadatafields{'owner'}=$ENV{'user.name'}.'@'.$ENV{'user.domain'};
+# --------------------------------- Compute various listings of metadata values
%language=();
$language{'any'}='Any language';
{
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>;
}
@@ -41,7 +117,7 @@ sub handler {
{
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>;
}
@@ -51,565 +127,117 @@ sub handler {
{
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>;
}
- $scrout="";
+ if ($ENV{'form.basicsubmit'} eq 'SEARCH') {
+ return &basicsearch($r,\%ENV);
+ }
+ elsif ($ENV{'form.advancedsubmit'} eq 'SEARCH') {
+ return &advancedsearch($r,\%ENV);
+ }
+
+ $scrout=''; # building a part of screen output
$scrout.=&searchphrasefield('Limit by title','title',
- '');
+ $ENV{'form.title'});
$scrout.=&searchphrasefield('Limit by author','author',
- '');
+ $ENV{'form.author'});
$scrout.=&searchphrasefield('Limit by subject','subject',
- '');
+ $ENV{'form.subject'});
+
+ $scrout.=&searchphrasefield('Limit by keywords','keywords',
+ $ENV{'form.keywords'});
+
+ $scrout.=&searchphrasefield('Limit by URL','url',
+ $ENV{'form.url'});
+
+ $scrout.=&searchphrasefield('Limit by version','version',
+ $ENV{'form.version'});
$scrout.=&searchphrasefield('Limit by notes','notes',
- '');
+ $ENV{'form.notes'});
$scrout.=&searchphrasefield('Limit by abstract','abstract',
- '');
+ $ENV{'form.abstract'});
+ $ENV{'form.mime'}='notxxx' unless length($ENV{'form.mime'});
$scrout.=&selectbox('Limit by MIME type','mime',
- 'notxxx',%mimetag);
+ $ENV{'form.mime'},%mimetag);
+
+ $ENV{'form.language'}='any' unless length($ENV{'form.language'});
$scrout.=&selectbox('Limit by language','language',
- 'any',%language);
+ $ENV{'form.language'},%language);
- $scrout.=<LIMIT BY CREATION DATE RANGE:
-between:
-
-
-and:
-
-
-
+between:
+CREATIONDATESTART
+ $scrout.=&dateboxes('creationdatestart',1,1,1976,
+ $ENV{'form.creationdatestart_month'},
+ $ENV{'form.creationdatestart_day'},
+ $ENV{'form.creationdatestart_year'},
+ );
+ $scrout.=<";
- $scrout.=<LIMIT BY LAST REVISION DATE RANGE:
- between:
-
-
-and:
-
-
-
+ between:
+LASTREVISIONDATESTART
+ $scrout.=&dateboxes('lastrevisiondatestart',1,1,1976,
+ $ENV{'form.lastrevisiondatestart_month'},
+ $ENV{'form.lastrevisiondatestart_day'},
+ $ENV{'form.lastrevisiondatestart_year'},
+ );
+ $scrout.=<';
$scrout.=&searchphrasefield('Limit by publisher/owner','owner',
- $metadatafields{'owner'});
+ $ENV{'form.owner'});
+# $metadatafields{'owner'});
+ $ENV{'form.copyright'}='any' unless length($ENV{'form.copyright'});
$scrout.=&selectbox('Limit by copyright/distribution','copyright',
- 'any',%cprtag);
+ $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(<