--- loncom/interface/lonsearchcat.pm 2002/06/19 20:39:11 1.123 +++ loncom/interface/lonsearchcat.pm 2002/06/20 14:31:31 1.124 @@ -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 that closes the search window 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 @@ my %hitcount; # stores number of hits # -- 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 @@ BEGIN { =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 @@ sub handler { "\_".&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 @@ sub handler { 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="". "\n"; $closebutton=""."\n"; - } - elsif ($ENV{'form.catalogmode'} eq 'groupsearch') { + } elsif ($ENV{'form.catalogmode'} eq 'groupsearch') { $hidden=< END @@ -261,63 +263,158 @@ END 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"; + + +The LearningOnline Network with CAPA + + + + +

Search Catalog

+
+$hidden +

Basic Search

+

+Enter terms or phrases separated by AND, OR, or NOT then press SEARCH below. +

+

+ +
+ENDDOCUMENT + $scrout.=' '.&simpletextfield('basicexp',$ENV{'form.basicexp'},40). + ' '; +# $scrout.=&simplecheckbox('allversions',$ENV{'form.allversions'}); +# $scrout.='Search historic archives'; + $scrout.=<Advanced Search
+

+

  +$closebutton + + + + +

+
+ + +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"; + + +The LearningOnline Network with CAPA + + + + +

Search Catalog

+
+$hidden +
+

Advanced Search

+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.=< @@ -331,16 +428,13 @@ CREATIONDATESTART $ENV{'form.creationdatestart_day'}, $ENV{'form.creationdatestart_year'}, ); - $scrout.=< LIMIT BY LAST REVISION DATE RANGE: @@ -361,10 +455,8 @@ LASTREVISIONDATEEND $ENV{'form.lastrevisiondateend_year'}, ); $scrout.='

'; - $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 @@ LASTREVISIONDATEEND \&{Apache::loncommon::copyrightdescription}, (&Apache::loncommon::copyrightids), ); - # ------------------------------------------- Compute customized metadata field $scrout.=< @@ -383,9 +474,7 @@ For resource-specific metadata, enter in 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'; - + $scrout.=&simpletextfield('custommetadata',$ENV{'form.custommetadata'}); $scrout.=< SHOW SPECIAL METADATA FIELDS: @@ -394,61 +483,8 @@ Enter in a space-separated list of speci in a fielded listing for each record result.
CUSTOMSHOW -$scrout.=&simpletextfield('customshow',$ENV{'form.customshow'}); -$scrout.=' initial users of this system do not need to worry about this option'; - -# ---------------------------------------------------------------- Print screen - $r->print(< - -The LearningOnline Network with CAPA - - - - -

Search Catalog

- -$hidden -
-

Basic Search

-

-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. -
-ENDDOCUMENT - $r->print(&simpletextfield('basicexp',$ENV{'form.basicexp'})); - $r->print(' '); - $r->print(&simplecheckbox('titleonly',$ENV{'form.titleonly'})); - $r->print('Title only '); -# $r->print(&simplecheckbox('allversions',$ENV{'form.allversions'})); -# Search historic archives - $r->print(< - - -$closebutton - - - - -

-
-

Advanced Search

-$scrout + $scrout.=&simpletextfield('customshow',$ENV{'form.customshow'}); + $scrout.=< @@ -468,8 +504,8 @@ Detailed Citation View ENDDOCUMENT - return OK; -} + return $scrout; +} ###################################################################### ###################################################################### @@ -646,7 +682,7 @@ sub selectbox { ###################################################################### ###################################################################### sub advancedsearch { - my ($r,$envhash)=@_; + my ($r,$envhash,$hidden)=@_; my %ENV=%{$envhash}; my $fillflag=0; # Clean up fields for safety @@ -749,13 +785,13 @@ sub advancedsearch { $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 advancedsearch { ###################################################################### ###################################################################### 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 @@ sub basicsearch { # 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 @@ sub basicsearch { # Output search results - &output_results('Basic',$r,$envhash,$query,$reply); + &output_results('Basic',$r,$envhash,$query,$reply,$hidden); return OK; } @@ -988,7 +1025,7 @@ contacted, etc.) ###################################################################### 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 @@ ENDPOP my ($title,$author,$subject,$url,$keywords,$version, $notes,$abstract,$mime,$lang, $creationdate,$lastrevisiondate,$owner,$copyright)=@fields; - - unless ($title) { $title='Untitled'; } + unless ($title =~ /^\s*$/ ) { $title='Untitled'; } unless ($ENV{'user.adv'}) { $keywords='- not displayed -'; $fields[4]=$keywords;