[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.='&nbsp;'.&simpletextfield('basicexp',$ENV{'form.basicexp'},40).
+        '&nbsp;';
+#    $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>
+&nbsp;<input type="submit" name="basicsubmit" value='SEARCH' />&nbsp;
+$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--