Diff for /loncom/interface/lonsearchcat.pm between versions 1.134 and 1.139

version 1.134, 2002/07/03 19:11:09 version 1.139, 2002/07/08 20:35:36
Line 118  The ubiquitous database hash Line 118  The ubiquitous database hash
 The full path to the (temporary) search database file.  This is set and  The full path to the (temporary) search database file.  This is set and
 used in &handler() and is also used in &output_results().  used in &handler() and is also used in &output_results().
   
   =item %Views
   
   Hash which associates an output view description with the function
   that produces it.  Adding a new view type should be as easy as
   adding a line to the definition of this hash and making sure the function
   takes the proper parameters.
   
 =back   =back 
   
 =cut  =cut
Line 133  my $importbutton; # button to take the s Line 140  my $importbutton; # button to take the s
 my %hash;     # database hash  my %hash;     # database hash
 my $diropendb = "";    # db file  my $diropendb = "";    # db file
   
   #             View Description           Function Pointer
   my %Views = ("Detailed Citation View" => \&detailed_citation_view,
                "Summary View"           => \&summary_view,
                "Fielded Format"         => \&fielded_format_view,
                "XML/SGML"               => \&xml_sgml_view );
   
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################
   
Line 223  END Line 236  END
     $searchtype = 'Basic'    if ($ENV{'form.basicsubmit'}    eq 'SEARCH');      $searchtype = 'Basic'    if ($ENV{'form.basicsubmit'}    eq 'SEARCH');
     $searchtype = 'Advanced' if ($ENV{'form.advancedsubmit'} eq 'SEARCH');      $searchtype = 'Advanced' if ($ENV{'form.advancedsubmit'} eq 'SEARCH');
     if ($searchtype) {      if ($searchtype) {
           # We are running a search
         my ($query,$customquery,$customshow,$libraries) =           my ($query,$customquery,$customshow,$libraries) = 
             (undef,undef,undef,undef);              (undef,undef,undef,undef);
         if ($searchtype eq 'Basic') {          if ($searchtype eq 'Basic') {
Line 239  END Line 253  END
         my $reply=&Apache::lonnet::metadata_query($query,$customquery,          my $reply=&Apache::lonnet::metadata_query($query,$customquery,
                                                $customshow,$libraries);                                                 $customshow,$libraries);
         &output_results($searchtype,$r,$reply,$hidden);          &output_results($searchtype,$r,$reply,$hidden);
     } elsif ($ENV{'form.reqinterface'} eq 'advanced') {      } else {
           #
           # We need to get information to search on
           #
           # Set the default view if it is not already set.
           if (!defined($ENV{'form.viewselect'})) {
               $ENV{'form.viewselect'} ="Detailed Citation View";
           }
         # Output the advanced interface          # Output the advanced interface
         $r->print(&advanced_search_form($closebutton,$hidden));          if ($ENV{'form.reqinterface'} eq 'advanced') {
     } else {               $r->print(&advanced_search_form($closebutton,$hidden));
         # Output normal search interface          } else { 
         $r->print(&basic_search_form($closebutton,$hidden));              # Output normal search interface
               $r->print(&basic_search_form($closebutton,$hidden));
           }
     }      }
     return OK;      return OK;
 }   } 
Line 295  ENDDOCUMENT Line 318  ENDDOCUMENT
         ' ';          ' ';
 #    $scrout.=&simplecheckbox('allversions',$ENV{'form.allversions'});  #    $scrout.=&simplecheckbox('allversions',$ENV{'form.allversions'});
 #    $scrout.='<font color="#800000">Search historic archives</font>';  #    $scrout.='<font color="#800000">Search historic archives</font>';
     $scrout.=<<ENDDOCUMENT;      $scrout.=<<END;
 </td><td><a href="/adm/searchcat?reqinterface=advanced">Advanced Search</a></td></tr></table>  </td><td><a href="/adm/searchcat?reqinterface=advanced">Advanced Search</a></td></tr></table>
 </p>  </p>
 <p>  <p>
 &nbsp;<input type="submit" name="basicsubmit" value='SEARCH' />&nbsp;  &nbsp;<input type="submit" name="basicsubmit" value='SEARCH' />&nbsp;
 $closebutton  $closebutton
 <!-- view selection -->  END
 <select name="viewselect">      $scrout.=&selectbox(undef,'viewselect',
 <option value="Detailed Citation View" selected="true" >Detailed Citation View</option>   $ENV{'form.viewselect'},
 <option value="Summary View"  >Summary View</option>   undef,undef,undef,
 <option value="Fielded Format">Fielded Format</option>   sort(keys(%Views)));
 <option value="XML/SGML"      >XML/SGML</option>      $scrout.=<<ENDDOCUMENT;
 </select>  
 <!-- end of view selection -->  
 <input type="button" value="HELP" onClick="openhelp()" />  <input type="button" value="HELP" onClick="openhelp()" />
 </p>  </p>
 </form>  </form>
Line 341  $closebutton Line 362  $closebutton
 <input type="button" value="HELP" onClick="openhelp()" />  <input type="button" value="HELP" onClick="openhelp()" />
 </p>  </p>
 END  END
       if (!defined($ENV{'form.viewselect'})) {
           $ENV{'form.viewselect'} ="Detailed Citation View";
       }
     my $scrout=<<"ENDHEADER";      my $scrout=<<"ENDHEADER";
 <html>  <html>
 <head>  <head>
Line 365  $hidden Line 389  $hidden
 <table>  <table>
 <tr><td><font color="#800000" face="helvetica"><b>VIEW:</b></font></td>  <tr><td><font color="#800000" face="helvetica"><b>VIEW:</b></font></td>
 <td>  <td>
 <!-- view selection -->  
 <select name="viewselect" size ="1">  
     <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 view selection -->  
 </td></tr>  
 ENDHEADER  ENDHEADER
     $scrout.=&searchphrasefield('title','title',      $scrout.=&selectbox(undef,'viewselect',
  $ENV{'form.title'});   $ENV{'form.viewselect'},
     $scrout.=&searchphrasefield('author','author',   undef,undef,undef,
  $ENV{'form.author'});   sort(keys(%Views)));
     $scrout.=&searchphrasefield('subject','subject',      $scrout.="</td></tr>\n";
  $ENV{'form.subject'});      $scrout.=&searchphrasefield('title',   'title'   ,$ENV{'form.title'});
     $scrout.=&searchphrasefield('keywords','keywords',      $scrout.=&searchphrasefield('author',  'author'  ,$ENV{'form.author'});
  $ENV{'form.keywords'});      $scrout.=&searchphrasefield('subject', 'subject' ,$ENV{'form.subject'});
     $scrout.=&searchphrasefield('URL','url',      $scrout.=&searchphrasefield('keywords','keywords',$ENV{'form.keywords'});
  $ENV{'form.url'});      $scrout.=&searchphrasefield('URL',     'url'     ,$ENV{'form.url'});
 #    $scrout.=&searchphrasefield('Limit by version','version',      $scrout.=&searchphrasefield('notes',   'notes'   ,$ENV{'form.notes'});
 # $ENV{'form.version'});      $scrout.=&searchphrasefield('abstract','abstract',$ENV{'form.abstract'});
     $scrout.=&searchphrasefield('notes','notes',  
  $ENV{'form.notes'});  
     $scrout.=&searchphrasefield('abstract','abstract',  
  $ENV{'form.abstract'});  
     # Hack - an empty table row.      # Hack - an empty table row.
     $scrout.="<tr><td>&nbsp;</td><td>&nbsp;</td></tr>\n";      $scrout.="<tr><td>&nbsp;</td><td>&nbsp;</td></tr>\n";
     $scrout.=&searchphrasefield('file<br />extension','mime',      $scrout.=&searchphrasefield('file<br />extension','mime',
Line 438  ENDHEADER Line 449  ENDHEADER
         $scrout.="</select>\n";          $scrout.="</select>\n";
     }      }
     #----------------------------------------------------------------      #----------------------------------------------------------------
     #   
     #  
     $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},
Line 604  Inputs: Line 613  Inputs:
   
 =item $title   =item $title 
   
 Printed above the select box, in uppercase.  Printed above the select box, in uppercase.  If undefined, only a select
   box will be returned, with no additional html.
   
 =item $name   =item $name 
   
Line 612  The name element of the <select> tag. Line 622  The name element of the <select> tag.
   
 =item $default   =item $default 
   
 The default value of the form.  Can be $anyvalue or in @idlist.  The default value of the form.  Can be $anyvalue, or in @idlist.
   
 =item $anyvalue   =item $anyvalue 
   
 The <option value="..."> used to indicate a default of   The <option value="..."> used to indicate a default of 
 none of the values.  none of the values.  Can be undef.
   
 =item $anytag   =item $anytag 
   
Line 713  END Line 723  END
 sub selectbox {  sub selectbox {
     my ($title,$name,$default,$anyvalue,$anytag,$functionref,@idlist)=@_;      my ($title,$name,$default,$anyvalue,$anytag,$functionref,@idlist)=@_;
     if (! defined($functionref)) { $functionref = sub { $_[0]}; }      if (! defined($functionref)) { $functionref = sub { $_[0]}; }
     my $uctitle=uc($title);      my $selout='';
     my $selout="\n".'<p><font color="#800000" face="helvetica">'.      if (defined($title)) {
         '<b>'.$uctitle.': </b></font><select name="'.$name.'">';          my $uctitle=uc($title);
     foreach ($anyvalue,@idlist) {          $selout="\n".'<p><font color="#800000" face="helvetica">'.
               '<b>'.$uctitle.': </b></font>';
       }
       $selout .= '<select name="'.$name.'">';
       unshift @idlist,$anyvalue if (defined($anyvalue));
       foreach (@idlist) {
         $selout.='<option value="'.$_.'"';          $selout.='<option value="'.$_.'"';
         if ($_ eq $default and !/^any$/) {          if ($_ eq $default and !/^any$/) {
     $selout.=' selected >'.&{$functionref}($_).'</option>';      $selout.=' selected >'.&{$functionref}($_).'</option>';
Line 726  sub selectbox { Line 741  sub selectbox {
  }   }
         else {$selout.='>'.&{$functionref}($_).'</option>';}          else {$selout.='>'.&{$functionref}($_).'</option>';}
     }      }
     return $selout.'</select></p>';      return $selout.'</select>'.(defined($title)?'</p>':' ');
 }  }
   
 ######################################################################  ######################################################################
Line 803  sub parse_advanced_search { Line 818  sub parse_advanced_search {
     push @queries,&build_SQL_query($field,$ENV{'form.'.$field});      push @queries,&build_SQL_query($field,$ENV{'form.'.$field});
         }          }
     }      }
       # I dislike the hack below.
       if ($ENV{'form.category'}) {
           $ENV{'form.mime'}='';
       }
     # Evaluate option lists      # Evaluate option lists
     if ($ENV{'form.language'} and $ENV{'form.language'} ne 'any') {      if ($ENV{'form.language'} and $ENV{'form.language'} ne 'any') {
  push @queries,"(language like \"$ENV{'form.language'}\")";   push @queries,"(language like \"$ENV{'form.language'}\")";
Line 1114  sub output_results { Line 1133  sub output_results {
     my $elapsetime=0;      my $elapsetime=0;
     my $resultflag=0;      my $resultflag=0;
     my $tflag=1;      my $tflag=1;
     my $viewselect=$ENV{'form.viewselect'};      ##
       ## Set viewing function
       ##
       my $viewfunction = $Views{$ENV{'form.viewselect'}};
       if (!defined($viewfunction)) {
           $r->print("Internal Error - Bad view selected.\n");
           $r->rflush();
           return;
       }
     #      #
     # make query information persistent to allow for subsequent revision      # make query information persistent to allow for subsequent revision
     my $persistent=&make_persistent(\%ENV);      my $persistent=&make_persistent(\%ENV);
     # spit out the results header      #
       # Begin producing output
     $r->print(&search_results_header($mode));      $r->print(&search_results_header($mode));
     $r->rflush();      $r->rflush();
       #
     # begin showing the cataloged results      # begin showing the cataloged results
     my $action = "/adm/searchcat";      my $action = "/adm/searchcat";
     if ($mode eq 'Basic') {       if ($mode eq 'Basic') { 
Line 1141  $persistent Line 1170  $persistent
 CATALOGCONTROLS  CATALOGCONTROLS
     #      #
     # make the pop-up window for status      # make the pop-up window for status
     #  
     $r->print(&make_popwin(%rhash));      $r->print(&make_popwin(%rhash));
     $r->rflush();      $r->rflush();
     ##      ##
Line 1218  CATALOGCONTROLS Line 1246  CATALOGCONTROLS
  } # end of if ($reply eq 'con_lost') else statement   } # end of if ($reply eq 'con_lost') else statement
         my %Fields = undef;     # Holds the data to be sent to the various           my %Fields = undef;     # Holds the data to be sent to the various 
                                 # *_view routines.                                  # *_view routines.
         my ($extrashow,$customfields,$customhash) = &handle_custom_fields(\@results);          my ($extrashow,$customfields,$customhash) = 
                                       &handle_custom_fields(\@results);
         my @customfields = @$customfields;          my @customfields = @$customfields;
         my %customhash   = %$customhash;          my %customhash   = %$customhash;
  untie %hash if (keys %hash);   untie %hash if (keys %hash);
Line 1235  CATALOGCONTROLS Line 1264  CATALOGCONTROLS
  chomp $result;   chomp $result;
  next unless $result;   next unless $result;
                 %Fields = &parse_raw_result($result,$rkey);                  %Fields = &parse_raw_result($result,$rkey);
                   #
                   # Check copyright tags and skip results the user cannot use
                   my (undef,undef,$resdom,$resname) = split('/',$Fields{'url'});
                   # Check for priv
                   if (($Fields{'copyright'} eq 'priv') && 
                       (($ENV{'user.name'} ne $resname) &&
                        ($ENV{'user.domain'} ne $resdom))) {
                       next;
                   }
                   # Check for domain
                   if (($Fields{'copyright'} eq 'domain') &&
                       ($ENV{'user.domain'} ne $resdom)) {
                       next;
                   }
                   #
  $Fields{'extrashow'}=$extrashow;   $Fields{'extrashow'}=$extrashow;
  if ($extrashow) {   if ($extrashow) {
     foreach my $field (@customfields) {      foreach my $field (@customfields) {
Line 1269  END Line 1313  END
 # <input type="hidden" name="url$fnum" value="$url" />  # <input type="hidden" name="url$fnum" value="$url" />
                     $fnum++;                      $fnum++;
  }   }
         if ($viewselect eq 'Detailed Citation View') {                  # Render the result into html
     $compiledresult.=&detailed_citation_view                  $compiledresult.= &$viewfunction(%Fields, hostname => $rkey );
                         (%Fields, hostname => $rkey );  
  }  
                 elsif ($viewselect eq 'Summary View') {  
     $compiledresult.=&summary_view  
                         (%Fields, hostname => $rkey );  
         }  
                 elsif ($viewselect eq 'Fielded Format') {  
     $compiledresult.=&fielded_format_view  
                         (%Fields, hostname => $rkey );  
         }  
                 elsif ($viewselect eq 'XML/SGML') {  
     $compiledresult.=&xml_sgml_view  
                         (%Fields, hostname => $rkey );  
  }  
                 if ($compiledresult or $servercount!=$servernum) {                  if ($compiledresult or $servercount!=$servernum) {
                     $compiledresult.="<hr align='left' width='200' noshade />";                      $compiledresult.="<hr align='left' width='200' noshade />";
                 }                  }
Line 1295  END Line 1325  END
     $resultflag=1;      $resultflag=1;
             $r->print($compiledresult);              $r->print($compiledresult);
  }   }
         my $percent=sprintf('%3.0f',($servercount/$servernum*100));  
       } # End of foreach loop over servers remaining        } # End of foreach loop over servers remaining
     }   # End of big loop - while($serversleft && $timeremain)      }   # End of big loop - while($serversleft && $timeremain)
     unless ($resultflag) {      unless ($resultflag) {
         $r->print("\nThere were no results that matched your query\n");          $r->print("\nThere were no results that matched your query\n");
     }      }
 #    $r->print('<script type="text/javascript">'.'popwin.close()</script>'."\n"); $r->rflush();       $r->print('<script type="text/javascript">'.'popwin.close()</script>'.
                 "\n"); 
     $r->print("</body>\n</html>\n");      $r->print("</body>\n</html>\n");
       $r->rflush(); 
     return;      return;
 }  }
   
Line 1600  sub make_popwin { Line 1631  sub make_popwin {
     # rows of 10 each.  No longer used to index images.      # rows of 10 each.  No longer used to index images.
     my $sn=1;      my $sn=1;
     foreach my $sk (sort keys %rhash) {      foreach my $sk (sort keys %rhash) {
  # '<a href="  
  $grid.="'<a href=\"";   $grid.="'<a href=\"";
  # javascript:displayinfo('+  
  $grid.="javascript:opener.displayinfo('+";   $grid.="javascript:opener.displayinfo('+";
  # "'"+'key  
  $grid.="\"'\"+'";   $grid.="\"'\"+'";
  $grid.=$sk;   $grid.=$sk;
  my $hc;   my $hc;
  if ($rhash{$sk} eq 'con_lost') {   if ($rhash{$sk} eq 'con_lost') {
     $hc="BAD CONNECTION, CONTACT SYSTEM ADMINISTRATOR ";      $hc="BAD CONNECTION ";
  }   }
  else {   else {
     $hc="'+\"'\"+\"+hc['$sk']+\"+\"'\"+'";      $hc="'+\"'\"+\"+hc['$sk']+\"+\"'\"+'";

Removed from v.1.134  
changed lines
  Added in v.1.139


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>