--- loncom/interface/lonsearchcat.pm 2001/03/19 16:45:38 1.41
+++ loncom/interface/lonsearchcat.pm 2002/07/28 20:02:14 1.145
@@ -1,154 +1,506 @@
-# The LearningOnline Network
+# The LearningOnline Network with CAPA
# Search Catalog
#
-# 03/08/2001 Scott Harrison
+# $Id: lonsearchcat.pm,v 1.145 2002/07/28 20:02:14 matthew Exp $
#
-# Functions
+# Copyright Michigan State University Board of Trustees
#
-# 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() :
-# filled(field) : determines whether a given field has been filled
-# basicsearch() :
-# output_blank_field_error() : outputs a message saying that more fields need
-# to be filled in
-# output_results() : outputs results from search
-# build_SQL_query() : builds a SQL query string from a logical expression
-# with AND/OR keywords
+# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
+#
+# LON-CAPA is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# LON-CAPA is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LON-CAPA; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# /home/httpd/html/adm/gpl.txt
+#
+# http://www.lon-capa.org/
+#
+# YEAR=2001
+# 3/8, 3/12, 3/13, 3/14, 3/15, 3/19 Scott Harrison
+# 3/20, 3/21, 3/22, 3/26, 3/27, 4/2, 8/15, 8/24, 8/25 Scott Harrison
+# 10/12,10/14,10/15,10/16,11/28,11/29,12/10,12/12,12/16 Scott Harrison
+# YEAR=2002
+# 1/17 Scott Harrison
+# 6/17 Matthew Hall
+#
+###############################################################################
+###############################################################################
+
+=pod
+
+=head1 NAME
+
+lonsearchcat - LONCAPA Search Interface
+
+=head1 SYNOPSIS
+
+Search interface to LON-CAPAs digital library
+
+=head1 DESCRIPTION
+
+This module enables searching for a distributed browseable catalog.
+
+This is part of the LearningOnline Network with CAPA project
+described at http://www.lon-capa.org.
+
+lonsearchcat presents the user with an interface to search the LON-CAPA
+digital library. lonsearchcat also initiates the execution of a search
+by sending the search parameters to LON-CAPA servers. The progress of
+search (on a server basis) is displayed to the user in a seperate window.
+
+=head1 Internals
+
+=over 4
+
+=cut
+
+###############################################################################
+###############################################################################
+
+###############################################################################
+## ##
+## ORGANIZATION OF THIS PERL MODULE ##
+## ##
+## 1. Modules used by this module ##
+## 2. Variables used throughout the module ##
+## 3. handler subroutine called via Apache and mod_perl ##
+## 4. Other subroutines ##
+## ##
+###############################################################################
package Apache::lonsearchcat;
+# ------------------------------------------------- modules used by this module
use strict;
use Apache::Constants qw(:common);
use Apache::lonnet();
use Apache::File();
use CGI qw(:standard);
use Text::Query;
+use DBI;
+use GDBM_File;
+use Apache::loncommon();
+use Apache::lonmysql();
-my %language;
-my $scrout;
-my %metadatafields;
-my %cprtag;
-my %mimetag;
+# ---------------------------------------- variables used throughout the module
-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'}));
+=pod
- $r->content_type('text/html');
- $r->send_http_header;
- return OK if $r->header_only;
+=item Global variables
- %metadatafields=();
+=over 4
- my $hidden='';
- $hidden=<
\n");
+ $r->rflush();
+ &run_search($r,$query,$customquery,$customshow,$libraries);
+ ##
+ ## Display the results
+ ##
+ &display_results($r,$searchtype,$importbutton,$closebutton);
+ $r->rflush();
+ } else {
+ #
+ # Set the default view if it is not already set.
+ if (!defined($ENV{'form.viewselect'})) {
+ $ENV{'form.viewselect'} ="Detailed Citation View";
+ }
+ #
+ # remove the requested interface from the environment.
+ my $interface;
+ if ($ENV{'form.reqinterface'}) {
+ $interface = lc($ENV{'form.reqinterface'});
+ } else {
+ $interface = 'basic';
+ }
+ ##
+ ## Determine course of action
+ ##
+ if ($interface eq 'display') {
+ # &display_results($closebutton));
+ } elsif ($interface eq 'advanced') {
+ $r->print(&advanced_search_form($closebutton));
+ } elsif ($interface eq 'basic') {
+ # Output normal search interface
+ $r->print(&basic_search_form($closebutton));
+ }
+ }
+ untie (%persistent_db);
+ return OK;
+}
- $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'});
+=pod
- $scrout.=&searchphrasefield('Limit by subject','subject',
- $ENV{'form.subject'});
+=item &basic_search_form()
- $scrout.=&searchphrasefield('Limit by keywords','keywords',
- $ENV{'form.keywords'});
+Returns a scalar which holds html for the basic search form.
- $scrout.=&searchphrasefield('Limit by URL','url',
- $ENV{'form.url'});
+=cut
- $scrout.=&searchphrasefield('Limit by version','version',
- $ENV{'form.version'});
+######################################################################
+######################################################################
- $scrout.=&searchphrasefield('Limit by notes','notes',
- $ENV{'form.notes'});
+sub basic_search_form{
+ my ($closebutton) = @_;
+ my $scrout=<<"ENDDOCUMENT";
+
+
+Search Catalog
+
+
+$closebutton
+END
+ $scrout.=&selectbox(undef,'viewselect',
+ $ENV{'form.viewselect'},
+ undef,undef,undef,
+ sort(keys(%Views)));
+ $scrout.=<
+ + +$closebutton + +
+END + if (!defined($ENV{'form.viewselect'})) { + $ENV{'form.viewselect'} ="Detailed Citation View"; + } + my $scrout=<<"ENDHEADER"; + + +