version 1.123, 2002/06/19 20:39:11
|
version 1.124, 2002/06/20 14:31:31
|
Line 121 button that closes the search window
|
Line 121 button that closes the search window
|
|
|
button to take the selecte results and go to group sorting |
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 |
=item %hash |
|
|
The ubiquitous database hash |
The ubiquitous database hash |
Line 157 my %hitcount; # stores number of hits
|
Line 145 my %hitcount; # stores number of hits
|
# -- dynamically rendered interface components |
# -- dynamically rendered interface components |
my $closebutton; # button that closes the search window |
my $closebutton; # button that closes the search window |
my $importbutton; # button to take the selected results and go to group sorting |
my $importbutton; # button to take the selected results and go to group sorting |
my $hidden; # Holds 'hidden' html forms |
|
|
|
# -- miscellaneous variables |
# -- miscellaneous variables |
my $scrout; # string that holds portions of the screen output |
|
my $yourself; # allows for quickly limiting to oneself |
my $yourself; # allows for quickly limiting to oneself |
my %hash; # database hash |
my %hash; # database hash |
|
|
Line 199 BEGIN {
|
Line 185 BEGIN {
|
|
|
=item &handler() - main handler invoked by httpd child |
=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 |
=cut |
|
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
# ----------------------------- Handling routine called via Apache and mod_perl |
|
sub handler { |
sub handler { |
my $r = shift; |
my $r = shift; |
untie %hash; |
untie %hash; |
Line 217 sub handler {
|
Line 216 sub handler {
|
"\_".&Apache::lonnet::escape($ENV{'user.name'})."_searchcat.db"; |
"\_".&Apache::lonnet::escape($ENV{'user.name'})."_searchcat.db"; |
|
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&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 ($ENV{'form.launch'} eq '1') { |
if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) { |
if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) { |
&start_fresh_session(); |
&start_fresh_session(); |
Line 229 sub handler {
|
Line 231 sub handler {
|
return OK; |
return OK; |
} |
} |
} |
} |
|
## |
# --------------------------- Produce some output, so people know it is working |
## Produce some output, so people know it is working |
|
## |
$r->print("\n"); |
$r->print("\n"); |
$r->rflush; |
$r->rflush; |
|
## |
# ----------------------------------- configure dynamic components of interface |
## Configure dynamic components of interface |
|
## |
|
my $hidden; # Holds 'hidden' html forms |
if ($ENV{'form.catalogmode'} eq 'interactive') { |
if ($ENV{'form.catalogmode'} eq 'interactive') { |
$hidden="<input type='hidden' name='catalogmode' value='interactive'>". |
$hidden="<input type='hidden' name='catalogmode' value='interactive'>". |
"\n"; |
"\n"; |
$closebutton="<input type='button' name='close' value='CLOSE' ". |
$closebutton="<input type='button' name='close' value='CLOSE' ". |
"onClick='self.close()'>"."\n"; |
"onClick='self.close()'>"."\n"; |
} |
} elsif ($ENV{'form.catalogmode'} eq 'groupsearch') { |
elsif ($ENV{'form.catalogmode'} eq 'groupsearch') { |
|
$hidden=<<END; |
$hidden=<<END; |
<input type='hidden' name='catalogmode' value='groupsearch'> |
<input type='hidden' name='catalogmode' value='groupsearch'> |
END |
END |
Line 261 END
|
Line 263 END
|
<input type='hidden' name='element' value='$ENV{'form.element'}'> |
<input type='hidden' name='element' value='$ENV{'form.element'}'> |
<input type='hidden' name='date' value='2'> |
<input type='hidden' name='date' value='2'> |
END |
END |
# ------------------------------------------------------ Determine current user |
## |
$yourself=$ENV{'user.name'}.'@'.$ENV{'user.domain'}; |
## What are we doing? |
|
## |
# --- 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 |
|
if ($ENV{'form.basicsubmit'} eq 'SEARCH') { |
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') { |
return OK; |
untie %hash; return &advancedsearch($r,\%ENV); |
} |
|
|
|
###################################################################### |
|
###################################################################### |
|
|
|
=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 |
=pod |
$scrout=''; # building a part of screen output |
|
|
=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', |
$scrout.=&searchphrasefield('Limit by title','title', |
$ENV{'form.title'}); |
$ENV{'form.title'}); |
|
|
$scrout.=&searchphrasefield('Limit by author','author', |
$scrout.=&searchphrasefield('Limit by author','author', |
$ENV{'form.author'}); |
$ENV{'form.author'}); |
|
|
$scrout.=&searchphrasefield('Limit by subject','subject', |
$scrout.=&searchphrasefield('Limit by subject','subject', |
$ENV{'form.subject'}); |
$ENV{'form.subject'}); |
|
|
$scrout.=&searchphrasefield('Limit by keywords','keywords', |
$scrout.=&searchphrasefield('Limit by keywords','keywords', |
$ENV{'form.keywords'}); |
$ENV{'form.keywords'}); |
|
|
$scrout.=&searchphrasefield('Limit by URL','url', |
$scrout.=&searchphrasefield('Limit by URL','url', |
$ENV{'form.url'}); |
$ENV{'form.url'}); |
|
|
# $scrout.=&searchphrasefield('Limit by version','version', |
# $scrout.=&searchphrasefield('Limit by version','version', |
# $ENV{'form.version'}); |
# $ENV{'form.version'}); |
|
|
$scrout.=&searchphrasefield('Limit by notes','notes', |
$scrout.=&searchphrasefield('Limit by notes','notes', |
$ENV{'form.notes'}); |
$ENV{'form.notes'}); |
|
|
$scrout.=&searchphrasefield('Limit by abstract','abstract', |
$scrout.=&searchphrasefield('Limit by abstract','abstract', |
$ENV{'form.abstract'}); |
$ENV{'form.abstract'}); |
|
|
$ENV{'form.mime'}='any' unless length($ENV{'form.mime'}); |
$ENV{'form.mime'}='any' unless length($ENV{'form.mime'}); |
$scrout.=&selectbox('Limit by MIME type','mime', |
$scrout.=&selectbox('Limit by MIME type','mime', |
$ENV{'form.mime'}, |
$ENV{'form.mime'}, |
'any','Any type', |
'any','Any type', |
\&{Apache::loncommon::filedescriptionex}, |
\&{Apache::loncommon::filedescriptionex}, |
(&Apache::loncommon::fileextensions)); |
(&Apache::loncommon::fileextensions)); |
|
|
$ENV{'form.language'}='any' unless length($ENV{'form.language'}); |
$ENV{'form.language'}='any' unless length($ENV{'form.language'}); |
|
|
$scrout.=&selectbox('Limit by language','language', |
$scrout.=&selectbox('Limit by language','language', |
$ENV{'form.language'},'any','Any Language', |
$ENV{'form.language'},'any','Any Language', |
\&{Apache::loncommon::languagedescription}, |
\&{Apache::loncommon::languagedescription}, |
(&Apache::loncommon::languageids), |
(&Apache::loncommon::languageids), |
); |
); |
|
|
# ------------------------------------------------ Compute date selection boxes |
# ------------------------------------------------ Compute date selection boxes |
$scrout.=<<CREATIONDATESTART; |
$scrout.=<<CREATIONDATESTART; |
<p> |
<p> |
Line 331 CREATIONDATESTART
|
Line 428 CREATIONDATESTART
|
$ENV{'form.creationdatestart_day'}, |
$ENV{'form.creationdatestart_day'}, |
$ENV{'form.creationdatestart_year'}, |
$ENV{'form.creationdatestart_year'}, |
); |
); |
$scrout.=<<CREATIONDATEEND; |
$scrout.="and:\n"; |
and: |
|
CREATIONDATEEND |
|
$scrout.=&dateboxes('creationdateend',12,31,2051, |
$scrout.=&dateboxes('creationdateend',12,31,2051, |
$ENV{'form.creationdateend_month'}, |
$ENV{'form.creationdateend_month'}, |
$ENV{'form.creationdateend_day'}, |
$ENV{'form.creationdateend_day'}, |
$ENV{'form.creationdateend_year'}, |
$ENV{'form.creationdateend_year'}, |
); |
); |
$scrout.="</p>"; |
$scrout.="</p>"; |
|
|
$scrout.=<<LASTREVISIONDATESTART; |
$scrout.=<<LASTREVISIONDATESTART; |
<p> |
<p> |
<font color="#800000" face="helvetica"><b>LIMIT BY LAST REVISION DATE RANGE: |
<font color="#800000" face="helvetica"><b>LIMIT BY LAST REVISION DATE RANGE: |
Line 361 LASTREVISIONDATEEND
|
Line 455 LASTREVISIONDATEEND
|
$ENV{'form.lastrevisiondateend_year'}, |
$ENV{'form.lastrevisiondateend_year'}, |
); |
); |
$scrout.='</p>'; |
$scrout.='</p>'; |
|
|
$scrout.=&searchphrasefield('Limit by publisher/owner','owner', |
$scrout.=&searchphrasefield('Limit by publisher/owner','owner', |
$ENV{'form.owner'}); |
$ENV{'form.owner'}); |
|
|
$ENV{'form.copyright'}='any' unless length($ENV{'form.copyright'}); |
$ENV{'form.copyright'}='any' unless length($ENV{'form.copyright'}); |
$scrout.=&selectbox('Limit by copyright/distribution','copyright', |
$scrout.=&selectbox('Limit by copyright/distribution','copyright', |
$ENV{'form.copyright'}, |
$ENV{'form.copyright'}, |
Line 372 LASTREVISIONDATEEND
|
Line 464 LASTREVISIONDATEEND
|
\&{Apache::loncommon::copyrightdescription}, |
\&{Apache::loncommon::copyrightdescription}, |
(&Apache::loncommon::copyrightids), |
(&Apache::loncommon::copyrightids), |
); |
); |
|
|
# ------------------------------------------- Compute customized metadata field |
# ------------------------------------------- Compute customized metadata field |
$scrout.=<<CUSTOMMETADATA; |
$scrout.=<<CUSTOMMETADATA; |
<p> |
<p> |
Line 383 For resource-specific metadata, enter in
|
Line 474 For resource-specific metadata, enter in
|
<b>Example:</b> grandmother=75 OR grandfather=85 |
<b>Example:</b> grandmother=75 OR grandfather=85 |
<br /> |
<br /> |
CUSTOMMETADATA |
CUSTOMMETADATA |
$scrout.=&simpletextfield('custommetadata',$ENV{'form.custommetadata'}); |
$scrout.=&simpletextfield('custommetadata',$ENV{'form.custommetadata'}); |
$scrout.=' <i>initial users of this system do not need to worry about this option</i>'; |
|
|
|
$scrout.=<<CUSTOMSHOW; |
$scrout.=<<CUSTOMSHOW; |
<p> |
<p> |
<font color="#800000" face="helvetica"><b>SHOW SPECIAL METADATA FIELDS:</b> |
<font color="#800000" face="helvetica"><b>SHOW SPECIAL METADATA FIELDS:</b> |
Line 394 Enter in a space-separated list of speci
|
Line 483 Enter in a space-separated list of speci
|
in a fielded listing for each record result. |
in a fielded listing for each record result. |
<br /> |
<br /> |
CUSTOMSHOW |
CUSTOMSHOW |
$scrout.=&simpletextfield('customshow',$ENV{'form.customshow'}); |
$scrout.=&simpletextfield('customshow',$ENV{'form.customshow'}); |
$scrout.=' <i>initial users of this system do not need to worry about this option</i>'; |
$scrout.=<<ENDDOCUMENT; |
|
|
# ---------------------------------------------------------------- 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 |
|
<p> |
<p> |
<input type="submit" name="advancedsubmit" value='SEARCH' /> |
<input type="submit" name="advancedsubmit" value='SEARCH' /> |
<input type="reset" name="reset" value='RESET' /> |
<input type="reset" name="reset" value='RESET' /> |
Line 468 Detailed Citation View</option>
|
Line 504 Detailed Citation View</option>
|
</body> |
</body> |
</html> |
</html> |
ENDDOCUMENT |
ENDDOCUMENT |
return OK; |
return $scrout; |
} |
} |
|
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
Line 646 sub selectbox {
|
Line 682 sub selectbox {
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
sub advancedsearch { |
sub advancedsearch { |
my ($r,$envhash)=@_; |
my ($r,$envhash,$hidden)=@_; |
my %ENV=%{$envhash}; |
my %ENV=%{$envhash}; |
my $fillflag=0; |
my $fillflag=0; |
# Clean up fields for safety |
# Clean up fields for safety |
Line 749 sub advancedsearch {
|
Line 785 sub advancedsearch {
|
$reply=&Apache::lonnet::metadata_query($query, |
$reply=&Apache::lonnet::metadata_query($query, |
$customquery,$customshow); |
$customquery,$customshow); |
} |
} |
&output_results('Advanced',$r,$envhash,$customquery,$reply); |
&output_results('Advanced',$r,$envhash,$customquery,$reply,$hidden); |
} |
} |
elsif ($customquery) { |
elsif ($customquery) { |
my $reply; # reply hash reference |
my $reply; # reply hash reference |
$reply=&Apache::lonnet::metadata_query('', |
$reply=&Apache::lonnet::metadata_query('', |
$customquery,$customshow); |
$customquery,$customshow); |
&output_results('Advanced',$r,$envhash,$customquery,$reply); |
&output_results('Advanced',$r,$envhash,$customquery,$reply,$hidden); |
} |
} |
# should not get to this point |
# should not get to this point |
return 'Error. Should not have gone to this point.'; |
return 'Error. Should not have gone to this point.'; |
Line 773 sub advancedsearch {
|
Line 809 sub advancedsearch {
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |
sub basicsearch { |
sub basicsearch { |
my ($r,$envhash)=@_; |
my ($r,$envhash,$hidden)=@_; |
my %ENV=%{$envhash}; |
my %ENV=%{$envhash}; |
# Clean up fields for safety |
# Clean up fields for safety |
for my $field ('basicexp') { |
for my $field ('basicexp') { |
Line 795 sub basicsearch {
|
Line 831 sub basicsearch {
|
# Build SQL query string based on form page |
# Build SQL query string based on form page |
my $query=''; |
my $query=''; |
my $concatarg=join('," ",', |
my $concatarg=join('," ",', |
('title', 'author', 'subject', 'notes', 'abstract')); |
('title', 'author', 'subject', 'notes', 'abstract', |
|
'keywords')); |
$concatarg='title' if $ENV{'form.titleonly'}; |
$concatarg='title' if $ENV{'form.titleonly'}; |
|
|
$query=&build_SQL_query('concat('.$concatarg.')',$ENV{'form.'.'basicexp'}); |
$query=&build_SQL_query('concat('.$concatarg.')',$ENV{'form.'.'basicexp'}); |
Line 805 sub basicsearch {
|
Line 842 sub basicsearch {
|
|
|
# Output search results |
# Output search results |
|
|
&output_results('Basic',$r,$envhash,$query,$reply); |
&output_results('Basic',$r,$envhash,$query,$reply,$hidden); |
|
|
return OK; |
return OK; |
} |
} |
Line 988 contacted, etc.)
|
Line 1025 contacted, etc.)
|
###################################################################### |
###################################################################### |
sub output_results { |
sub output_results { |
my $fnum; # search result counter |
my $fnum; # search result counter |
my ($mode,$r,$envhash,$query,$replyref)=@_; |
my ($mode,$r,$envhash,$query,$replyref,$hidden)=@_; |
my %ENV=%{$envhash}; |
my %ENV=%{$envhash}; |
my %rhash=%{$replyref}; |
my %rhash=%{$replyref}; |
my $compiledresult=''; |
my $compiledresult=''; |
Line 1326 ENDPOP
|
Line 1363 ENDPOP
|
my ($title,$author,$subject,$url,$keywords,$version, |
my ($title,$author,$subject,$url,$keywords,$version, |
$notes,$abstract,$mime,$lang, |
$notes,$abstract,$mime,$lang, |
$creationdate,$lastrevisiondate,$owner,$copyright)=@fields; |
$creationdate,$lastrevisiondate,$owner,$copyright)=@fields; |
|
unless ($title =~ /^\s*$/ ) { $title='<i>Untitled</i>'; } |
unless ($title) { $title='<i>Untitled</i>'; } |
|
unless ($ENV{'user.adv'}) { |
unless ($ENV{'user.adv'}) { |
$keywords='<i>- not displayed -</i>'; |
$keywords='<i>- not displayed -</i>'; |
$fields[4]=$keywords; |
$fields[4]=$keywords; |