[LON-CAPA-cvs] cvs: loncom /interface lonsearchcat.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Thu, 20 Jun 2002 14:31:31 -0000
This is a MIME encoded message
--matthew1024583491
Content-Type: text/plain
matthew Thu Jun 20 10:31:31 2002 EDT
Modified files:
/loncom/interface lonsearchcat.pm
Log:
$hidden, $scrout, and $yourself are no longer global variables or (in
the latter case) no longer in the code at all.
Split search interface. By default the user is sent to the basic search
and must request the advanced search.
Added &basic_search_form and &advanced_search_form functions.
Removed much verbage from the basic search screen.
Added 'keywords' to the basic search query.
Cleaned up &handler, it is now (I hope) easier to tell what is going on.
--matthew1024583491
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20020620103131.txt"
Index: loncom/interface/lonsearchcat.pm
diff -u loncom/interface/lonsearchcat.pm:1.123 loncom/interface/lonsearchcat.pm:1.124
--- loncom/interface/lonsearchcat.pm:1.123 Wed Jun 19 16:39:11 2002
+++ loncom/interface/lonsearchcat.pm Thu Jun 20 10:31:31 2002
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Search Catalog
#
-# $Id: lonsearchcat.pm,v 1.123 2002/06/19 20:39:11 matthew Exp $
+# $Id: lonsearchcat.pm,v 1.124 2002/06/20 14:31:31 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -121,18 +121,6 @@
button to take the selecte results and go to group sorting
-=item $hidden
-
-holds 'hidden' html forms
-
-=item $scrout
-
-string that holds portions of the screen output
-
-=item $yourself
-
-allows for quickly limiting to oneself
-
=item %hash
The ubiquitous database hash
@@ -157,10 +145,8 @@
# -- dynamically rendered interface components
my $closebutton; # button that closes the search window
my $importbutton; # button to take the selected results and go to group sorting
-my $hidden; # Holds 'hidden' html forms
# -- miscellaneous variables
-my $scrout; # string that holds portions of the screen output
my $yourself; # allows for quickly limiting to oneself
my %hash; # database hash
@@ -199,11 +185,24 @@
=item &handler() - main handler invoked by httpd child
+=item Variables
+
+=over 4
+
+=item $hidden
+
+holds 'hidden' html forms
+
+=item $scrout
+
+string that holds portions of the screen output
+
+=back
+
=cut
######################################################################
######################################################################
-# ----------------------------- Handling routine called via Apache and mod_perl
sub handler {
my $r = shift;
untie %hash;
@@ -217,8 +216,11 @@
"\_".&Apache::lonnet::escape($ENV{'user.name'})."_searchcat.db";
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['catalogmode','launch','acts','mode','form','element']);
-
+ ['catalogmode','launch','acts','mode','form','element',
+ 'reqinterface']);
+ ##
+ ## Clear out old values from database
+ ##
if ($ENV{'form.launch'} eq '1') {
if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) {
&start_fresh_session();
@@ -229,21 +231,21 @@
return OK;
}
}
-
-# --------------------------- Produce some output, so people know it is working
-
+ ##
+ ## Produce some output, so people know it is working
+ ##
$r->print("\n");
$r->rflush;
-
-# ----------------------------------- configure dynamic components of interface
-
+ ##
+ ## Configure dynamic components of interface
+ ##
+ my $hidden; # Holds 'hidden' html forms
if ($ENV{'form.catalogmode'} eq 'interactive') {
$hidden="<input type='hidden' name='catalogmode' value='interactive'>".
"\n";
$closebutton="<input type='button' name='close' value='CLOSE' ".
"onClick='self.close()'>"."\n";
- }
- elsif ($ENV{'form.catalogmode'} eq 'groupsearch') {
+ } elsif ($ENV{'form.catalogmode'} eq 'groupsearch') {
$hidden=<<END;
<input type='hidden' name='catalogmode' value='groupsearch'>
END
@@ -261,63 +263,158 @@
<input type='hidden' name='element' value='$ENV{'form.element'}'>
<input type='hidden' name='date' value='2'>
END
-# ------------------------------------------------------ Determine current user
- $yourself=$ENV{'user.name'}.'@'.$ENV{'user.domain'};
-
-# --- Now, depending on the interface actions, do one of three things here:
-# --- 1. a basic search
-# --- 2. an advanced search
-# --- 3. output a search interface
-
-# ----------------------------------- See if a search invocation should be done
+ ##
+ ## What are we doing?
+ ##
if ($ENV{'form.basicsubmit'} eq 'SEARCH') {
- untie %hash; return &basicsearch($r,\%ENV);
+ # Perform basic search and give results
+ return &basicsearch($r,\%ENV,$hidden);
+ } elsif ($ENV{'form.advancedsubmit'} eq 'SEARCH') {
+ # Perform advanced search and give results
+ return &advancedsearch($r,\%ENV,$hidden);
+ } elsif ($ENV{'form.reqinterface'} eq 'advanced') {
+ # Output the advanced interface
+ $r->print(&advanced_search_form($closebutton,$hidden));
+ return OK;
+ } else {
+ # Output normal search interface
+ $r->print(&basic_search_form($closebutton,$hidden));
}
- elsif ($ENV{'form.advancedsubmit'} eq 'SEARCH') {
- untie %hash; return &advancedsearch($r,\%ENV);
+ return OK;
+}
+
+######################################################################
+######################################################################
+
+=pod
+
+=item &basic_search_form()
+
+Returns a scalar which holds html for the basic search form.
+
+=cut
+
+######################################################################
+######################################################################
+
+sub basic_search_form{
+ my ($closebutton,$hidden) = @_;
+ my $scrout=<<"ENDDOCUMENT";
+<html>
+<head>
+<title>The LearningOnline Network with CAPA</title>
+<script type="text/javascript">
+ function openhelp(val) {
+ openhelpwin=open('/adm/help/searchcat.html','helpscreen',
+ 'scrollbars=1,width=600,height=300');
+ openhelpwin.focus();
}
+</script>
+</head>
+<body bgcolor="#FFFFFF">
+<img align='right' src='/adm/lonIcons/lonlogos.gif' />
+<h1>Search Catalog</h1>
+<form method="post" action="/adm/searchcat">
+$hidden
+<h3>Basic Search</h3>
+<p>
+Enter terms or phrases separated by AND, OR, or NOT then press SEARCH below.
+</p>
+<p>
+<table>
+<tr><td>
+ENDDOCUMENT
+ $scrout.=' '.&simpletextfield('basicexp',$ENV{'form.basicexp'},40).
+ ' ';
+# $scrout.=&simplecheckbox('allversions',$ENV{'form.allversions'});
+# $scrout.='<font color="#800000">Search historic archives</font>';
+ $scrout.=<<ENDDOCUMENT;
+</td><td><a href="/adm/searchcat?reqinterface=advanced">Advanced Search</a></td></tr></table>
+</p>
+<p>
+ <input type="submit" name="basicsubmit" value='SEARCH' />
+$closebutton
+<!-- basic view selection -->
+<select name='basicviewselect'>
+<option value='Detailed Citation View' selected="true">
+Detailed Citation View</option>
+<option value='Summary View'>Summary View</option>
+<option value='Fielded Format'>Fielded Format</option>
+<option value='XML/SGML'>XML/SGML</option>
+</select>
+<!-- end of basic view selection -->
+<input type="button" value="HELP" onClick="openhelp()" />
+</p>
+</form>
+</body>
+</html>
+ENDDOCUMENT
+ return $scrout;
+}
+######################################################################
+######################################################################
-# ----------------------------- Else, begin building search interface to output
- $scrout=''; # building a part of screen output
+=pod
+
+=item &advanced_search_form()
+
+Returns a scalar which holds html for the advanced search form.
+
+=cut
+
+######################################################################
+######################################################################
+
+sub advanced_search_form{
+ my ($closebutton,$hidden) = @_;
+ my $scrout=<<"ENDHEADER";
+<html>
+<head>
+<title>The LearningOnline Network with CAPA</title>
+<script type="text/javascript">
+ function openhelp(val) {
+ openhelpwin=open('/adm/help/searchcat.html','helpscreen',
+ 'scrollbars=1,width=600,height=300');
+ openhelpwin.focus();
+ }
+</script>
+</head>
+<body bgcolor="#FFFFFF">
+<img align='right' src='/adm/lonIcons/lonlogos.gif' />
+<h1>Search Catalog</h1>
+<form method="post" action="/adm/searchcat">
+$hidden
+<hr />
+<h3>Advanced Search</h3>
+ENDHEADER
$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'}='any' unless length($ENV{'form.mime'});
$scrout.=&selectbox('Limit by MIME type','mime',
$ENV{'form.mime'},
'any','Any type',
\&{Apache::loncommon::filedescriptionex},
(&Apache::loncommon::fileextensions));
-
$ENV{'form.language'}='any' unless length($ENV{'form.language'});
-
$scrout.=&selectbox('Limit by language','language',
$ENV{'form.language'},'any','Any Language',
\&{Apache::loncommon::languagedescription},
(&Apache::loncommon::languageids),
);
-
# ------------------------------------------------ Compute date selection boxes
$scrout.=<<CREATIONDATESTART;
<p>
@@ -331,16 +428,13 @@
$ENV{'form.creationdatestart_day'},
$ENV{'form.creationdatestart_year'},
);
- $scrout.=<<CREATIONDATEEND;
-and:
-CREATIONDATEEND
+ $scrout.="and:\n";
$scrout.=&dateboxes('creationdateend',12,31,2051,
$ENV{'form.creationdateend_month'},
$ENV{'form.creationdateend_day'},
$ENV{'form.creationdateend_year'},
);
$scrout.="</p>";
-
$scrout.=<<LASTREVISIONDATESTART;
<p>
<font color="#800000" face="helvetica"><b>LIMIT BY LAST REVISION DATE RANGE:
@@ -361,10 +455,8 @@
$ENV{'form.lastrevisiondateend_year'},
);
$scrout.='</p>';
-
$scrout.=&searchphrasefield('Limit by publisher/owner','owner',
$ENV{'form.owner'});
-
$ENV{'form.copyright'}='any' unless length($ENV{'form.copyright'});
$scrout.=&selectbox('Limit by copyright/distribution','copyright',
$ENV{'form.copyright'},
@@ -372,7 +464,6 @@
\&{Apache::loncommon::copyrightdescription},
(&Apache::loncommon::copyrightids),
);
-
# ------------------------------------------- Compute customized metadata field
$scrout.=<<CUSTOMMETADATA;
<p>
@@ -383,9 +474,7 @@
<b>Example:</b> grandmother=75 OR grandfather=85
<br />
CUSTOMMETADATA
-$scrout.=&simpletextfield('custommetadata',$ENV{'form.custommetadata'});
-$scrout.=' <i>initial users of this system do not need to worry about this option</i>';
-
+ $scrout.=&simpletextfield('custommetadata',$ENV{'form.custommetadata'});
$scrout.=<<CUSTOMSHOW;
<p>
<font color="#800000" face="helvetica"><b>SHOW SPECIAL METADATA FIELDS:</b>
@@ -394,61 +483,8 @@
in a fielded listing for each record result.
<br />
CUSTOMSHOW
-$scrout.=&simpletextfield('customshow',$ENV{'form.customshow'});
-$scrout.=' <i>initial users of this system do not need to worry about this option</i>';
-
-# ---------------------------------------------------------------- Print screen
- $r->print(<<ENDDOCUMENT);
-<html>
-<head>
-<title>The LearningOnline Network with CAPA</title>
-<script type="text/javascript">
- function openhelp(val) {
- openhelpwin=open('/adm/help/searchcat.html','helpscreen',
- 'scrollbars=1,width=600,height=300');
- openhelpwin.focus();
- }
-</script>
-</head>
-<body bgcolor="#FFFFFF">
-<img align='right' src='/adm/lonIcons/lonlogos.gif' />
-<h1>Search Catalog</h1>
-<form method="post" action="/adm/searchcat">
-$hidden
-<hr />
-<h3>Basic Search</h3>
-<p>
-Enter terms or phrases separated by search operators
-such as AND, OR, or NOT then press SEARCH below. Terms should be specific
-to the title, author, subject, notes, or abstract information associated
-with a resource.
-<br />
-ENDDOCUMENT
- $r->print(&simpletextfield('basicexp',$ENV{'form.basicexp'}));
- $r->print(' ');
- $r->print(&simplecheckbox('titleonly',$ENV{'form.titleonly'}));
- $r->print('<font color="#800000">Title only</font> ');
-# $r->print(&simplecheckbox('allversions',$ENV{'form.allversions'}));
-# <font color="#800000">Search historic archives</font>
- $r->print(<<ENDDOCUMENT);
-<br />
-<input type="submit" name="basicsubmit" value='SEARCH' />
-<input type="reset" name="reset" value='RESET' />
-$closebutton
-<!-- basic view selection -->
-<select name='basicviewselect'>
-<option value='Detailed Citation View' selected="true">
-Detailed Citation View</option>
-<option value='Summary View'>Summary View</option>
-<option value='Fielded Format'>Fielded Format</option>
-<option value='XML/SGML'>XML/SGML</option>
-</select>
-<!-- end of basic view selection -->
-<input type="button" value="HELP" onClick="openhelp()" />
-</p>
-<hr />
-<h3>Advanced Search</h3>
-$scrout
+ $scrout.=&simpletextfield('customshow',$ENV{'form.customshow'});
+ $scrout.=<<ENDDOCUMENT;
<p>
<input type="submit" name="advancedsubmit" value='SEARCH' />
<input type="reset" name="reset" value='RESET' />
@@ -468,8 +504,8 @@
</body>
</html>
ENDDOCUMENT
- return OK;
-}
+ return $scrout;
+}
######################################################################
######################################################################
@@ -646,7 +682,7 @@
######################################################################
######################################################################
sub advancedsearch {
- my ($r,$envhash)=@_;
+ my ($r,$envhash,$hidden)=@_;
my %ENV=%{$envhash};
my $fillflag=0;
# Clean up fields for safety
@@ -749,13 +785,13 @@
$reply=&Apache::lonnet::metadata_query($query,
$customquery,$customshow);
}
- &output_results('Advanced',$r,$envhash,$customquery,$reply);
+ &output_results('Advanced',$r,$envhash,$customquery,$reply,$hidden);
}
elsif ($customquery) {
my $reply; # reply hash reference
$reply=&Apache::lonnet::metadata_query('',
$customquery,$customshow);
- &output_results('Advanced',$r,$envhash,$customquery,$reply);
+ &output_results('Advanced',$r,$envhash,$customquery,$reply,$hidden);
}
# should not get to this point
return 'Error. Should not have gone to this point.';
@@ -773,7 +809,7 @@
######################################################################
######################################################################
sub basicsearch {
- my ($r,$envhash)=@_;
+ my ($r,$envhash,$hidden)=@_;
my %ENV=%{$envhash};
# Clean up fields for safety
for my $field ('basicexp') {
@@ -795,7 +831,8 @@
# Build SQL query string based on form page
my $query='';
my $concatarg=join('," ",',
- ('title', 'author', 'subject', 'notes', 'abstract'));
+ ('title', 'author', 'subject', 'notes', 'abstract',
+ 'keywords'));
$concatarg='title' if $ENV{'form.titleonly'};
$query=&build_SQL_query('concat('.$concatarg.')',$ENV{'form.'.'basicexp'});
@@ -805,7 +842,7 @@
# Output search results
- &output_results('Basic',$r,$envhash,$query,$reply);
+ &output_results('Basic',$r,$envhash,$query,$reply,$hidden);
return OK;
}
@@ -988,7 +1025,7 @@
######################################################################
sub output_results {
my $fnum; # search result counter
- my ($mode,$r,$envhash,$query,$replyref)=@_;
+ my ($mode,$r,$envhash,$query,$replyref,$hidden)=@_;
my %ENV=%{$envhash};
my %rhash=%{$replyref};
my $compiledresult='';
@@ -1326,8 +1363,7 @@
my ($title,$author,$subject,$url,$keywords,$version,
$notes,$abstract,$mime,$lang,
$creationdate,$lastrevisiondate,$owner,$copyright)=@fields;
-
- unless ($title) { $title='<i>Untitled</i>'; }
+ unless ($title =~ /^\s*$/ ) { $title='<i>Untitled</i>'; }
unless ($ENV{'user.adv'}) {
$keywords='<i>- not displayed -</i>';
$fields[4]=$keywords;
--matthew1024583491--