Diff for /loncom/interface/lonsearchcat.pm between versions 1.127 and 1.133

version 1.127, 2002/06/24 15:26:28 version 1.133, 2002/06/27 19:28:50
Line 67  search (on a server basis) is displayed Line 67  search (on a server basis) is displayed
 ###############################################################################  ###############################################################################
 ###############################################################################  ###############################################################################
   
   ###############################################################################
 ##                                                                           ##  ##                                                                           ##
 ## ORGANIZATION OF THIS PERL MODULE                                          ##  ## ORGANIZATION OF THIS PERL MODULE                                          ##
 ##                                                                           ##  ##                                                                           ##
 ## 1. Modules used by this module                                            ##  ## 1. Modules used by this module                                            ##
 ## 2. Choices for different output views (detailed, summary, xml, etc)       ##  ## 2. Variables used throughout the module                                   ##
 ## 3. BEGIN block (to be run once after compilation)                         ##  ## 3. handler subroutine called via Apache and mod_perl                      ##
 ## 4. Handling routine called via Apache and mod_perl                        ##  ## 4. Other subroutines                                                      ##
 ## 5. Other subroutines                                                      ##  
 ##                                                                           ##  ##                                                                           ##
 ###############################################################################  ###############################################################################
   
Line 212  END Line 212  END
 onClick='javascript:select_group()'>  onClick='javascript:select_group()'>
 END  END
     }      }
     $hidden .= <<END;      $hidden .= &make_persistent({ "form.mode"    => $ENV{'form.mode'},
 <input type='hidden' name='mode'    value='$ENV{'form.mode'}'>                                    "form.form"    => $ENV{'form.form'},
 <input type='hidden' name='form'    value='$ENV{'form.form'}'>                                    "form.element" => $ENV{'form.element'},
 <input type='hidden' name='element' value='$ENV{'form.element'}'>                                    "form.date"    => 2 });
 <input type='hidden' name='date' value='2'>  
 END  
     ##      ##
     ##  What are we doing?      ##  What are we doing?
     ##      ##
     if ($ENV{'form.basicsubmit'} eq 'SEARCH') {      if ($ENV{'form.basicsubmit'} eq 'SEARCH') {
         # Perform basic search and give results          # Perform basic search and give results
  return &basicsearch($r,\%ENV,$hidden);   return &basicsearch($r,$hidden);
     } elsif ($ENV{'form.advancedsubmit'} eq 'SEARCH') {      } elsif ($ENV{'form.advancedsubmit'} eq 'SEARCH') {
         # Perform advanced search and give results          # Perform advanced search and give results
  return &advancedsearch($r,\%ENV,$hidden);   return &advancedsearch($r,$hidden);
     } elsif ($ENV{'form.reqinterface'} eq 'advanced') {      } elsif ($ENV{'form.reqinterface'} eq 'advanced') {
         # Output the advanced interface          # Output the advanced interface
         $r->print(&advanced_search_form($closebutton,$hidden));          $r->print(&advanced_search_form($closebutton,$hidden));
Line 273  sub basic_search_form{ Line 271  sub basic_search_form{
 $hidden  $hidden
 <h3>Basic Search</h3>  <h3>Basic Search</h3>
 <p>  <p>
 Enter terms or phrases separated by AND, OR, or NOT then press SEARCH below.  Enter terms or phrases separated by AND, OR, or NOT 
   then press SEARCH below.
 </p>  </p>
 <p>  <p>
 <table>  <table>
Line 289  ENDDOCUMENT Line 288  ENDDOCUMENT
 <p>  <p>
 &nbsp;<input type="submit" name="basicsubmit" value='SEARCH' />&nbsp;  &nbsp;<input type="submit" name="basicsubmit" value='SEARCH' />&nbsp;
 $closebutton  $closebutton
 <!-- basic view selection -->  <!-- view selection -->
 <select name='basicviewselect'>  <select name="viewselect">
 <option value='Detailed Citation View' selected="true">  <option value="Detailed Citation View" selected="true" >Detailed Citation View</option>
 Detailed Citation View</option>  <option value="Summary View"  >Summary View</option>
 <option value='Summary View'>Summary View</option>  <option value="Fielded Format">Fielded Format</option>
 <option value='Fielded Format'>Fielded Format</option>  <option value="XML/SGML"      >XML/SGML</option>
 <option value='XML/SGML'>XML/SGML</option>  
 </select>  </select>
 <!-- end of basic view selection -->  <!-- end of view selection -->
 <input type="button" value="HELP" onClick="openhelp()" />  <input type="button" value="HELP" onClick="openhelp()" />
 </p>  </p>
 </form>  </form>
Line 322  Returns a scalar which holds html for th Line 320  Returns a scalar which holds html for th
   
 sub advanced_search_form{  sub advanced_search_form{
     my ($closebutton,$hidden) = @_;      my ($closebutton,$hidden) = @_;
       my $advanced_buttons = <<"END";
   <p>
   <input type="submit" name="advancedsubmit" value='SEARCH' />
   <input type="reset" name="reset" value='RESET' />
   $closebutton
   <input type="button" value="HELP" onClick="openhelp()" />
   </p>
   END
     my $scrout=<<"ENDHEADER";      my $scrout=<<"ENDHEADER";
 <html>  <html>
 <head>  <head>
Line 336  sub advanced_search_form{ Line 342  sub advanced_search_form{
 </head>  </head>
 <body bgcolor="#FFFFFF">  <body bgcolor="#FFFFFF">
 <img align='right' src='/adm/lonIcons/lonlogos.gif' />  <img align='right' src='/adm/lonIcons/lonlogos.gif' />
 <h1>Search Catalog</h1>  <h1>Advanced Catalog Search</h1>
   <hr />
   Enter terms or phrases separated by search operators 
   such as AND, OR, or NOT.<br />
 <form method="post" action="/adm/searchcat">  <form method="post" action="/adm/searchcat">
   $advanced_buttons
 $hidden  $hidden
 <hr />  <table>
 <h3>Advanced Search</h3>  <tr><td><font color="#800000" face="helvetica"><b>VIEW:</b></font></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('Limit by title','title',      $scrout.=&searchphrasefield('title','title',
  $ENV{'form.title'});   $ENV{'form.title'});
     $scrout.=&searchphrasefield('Limit by author','author',      $scrout.=&searchphrasefield('author','author',
  $ENV{'form.author'});   $ENV{'form.author'});
     $scrout.=&searchphrasefield('Limit by subject','subject',      $scrout.=&searchphrasefield('subject','subject',
  $ENV{'form.subject'});   $ENV{'form.subject'});
     $scrout.=&searchphrasefield('Limit by keywords','keywords',      $scrout.=&searchphrasefield('keywords','keywords',
  $ENV{'form.keywords'});   $ENV{'form.keywords'});
     $scrout.=&searchphrasefield('Limit by URL','url',      $scrout.=&searchphrasefield('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('notes','notes',
  $ENV{'form.notes'});   $ENV{'form.notes'});
     $scrout.=&searchphrasefield('Limit by abstract','abstract',      $scrout.=&searchphrasefield('abstract','abstract',
  $ENV{'form.abstract'});   $ENV{'form.abstract'});
     $ENV{'form.mime'}='any' unless length($ENV{'form.mime'});      # Hack - an empty table row.
     $scrout.=&selectbox('Limit by MIME type','mime',      $scrout.="<tr><td>&nbsp;</td><td>&nbsp;</td></tr>\n";
  $ENV{'form.mime'},      $scrout.=&searchphrasefield('file<br />extension','mime',
  'any','Any type',                          $ENV{'form.mime'});
  \&{Apache::loncommon::filedescriptionex},      $scrout.="<tr><td>&nbsp;</td><td>&nbsp;</td></tr>\n";
  (&Apache::loncommon::fileextensions));      $scrout.=&searchphrasefield('publisher<br />owner','owner',
    $ENV{'form.owner'});
       $scrout.="</table>\n";
       $ENV{'form.category'}='any' unless length($ENV{'form.category'});
       $scrout.=&selectbox('File Category','category',
    $ENV{'form.category'},
    'any','Any category',
    undef,
    (&Apache::loncommon::filecategories()));
     $ENV{'form.language'}='any' unless length($ENV{'form.language'});      $ENV{'form.language'}='any' unless length($ENV{'form.language'});
       #----------------------------------------------------------------
       # Allow restriction to multiple domains.
       #   I make the crazy assumption that there will never be a domain 'any'.
       #
       $ENV{'form.domains'} = 'any' if (! exists($ENV{'form.domains'}));
       my @allowed_domains = (ref($ENV{'form.domains'}) ? @{$ENV{'form.domains'}} 
                              :  ($ENV{'form.domains'}) );
       my %domain_hash = ();
       foreach (@allowed_domains) {
           $domain_hash{$_}++;
       }
       my @domains =&Apache::loncommon::get_domains();
       # adjust the size of the select box
       my $size = 4;
       my $size = (scalar @domains < ($size - 1) ? scalar @domains + 1 : $size);
       # standalone machines do not get to choose a domain to search.
       if ((scalar @domains) == 1) {
           $scrout .='<input type="hidden" name="domains" value="any" />'."\n";
       } else {
           $scrout.="\n".'<font color="#800000" face="helvetica"><b>'.
               'DOMAINS</b></font><br />'.
                   '<select name="domains" size="'.$size.'" multiple>'."\n".
                       '<option name="any" value="any" '.
                           ($domain_hash{'any'}? 'selected ' :'').
                           '>all domains</option>'."\n";
           foreach my $dom (sort @domains) {
               $scrout.="<option name=\"$dom\" ".
                   ($domain_hash{$dom} ? 'selected ' :'').">$dom</option>\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 410  LASTREVISIONDATEEND Line 472  LASTREVISIONDATEEND
  $ENV{'form.lastrevisiondateend_year'},   $ENV{'form.lastrevisiondateend_year'},
  );   );
     $scrout.='</p>';      $scrout.='</p>';
     $scrout.=&searchphrasefield('Limit by publisher/owner','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 440  in a fielded listing for each record res Line 500  in a fielded listing for each record res
 CUSTOMSHOW  CUSTOMSHOW
     $scrout.=&simpletextfield('customshow',$ENV{'form.customshow'});      $scrout.=&simpletextfield('customshow',$ENV{'form.customshow'});
     $scrout.=<<ENDDOCUMENT;      $scrout.=<<ENDDOCUMENT;
 <p>  $advanced_buttons
 <input type="submit" name="advancedsubmit" value='SEARCH' />  
 <input type="reset" name="reset" value='RESET' />  
 $closebutton  
 <!-- advance view select -->  
 <select name='advancedviewselect'>  
 <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 advanced view select -->  
 <input type="button" value="HELP" onClick="openhelp()" />  
 </p>  
 </form>  </form>
 </body>  </body>
 </html>  </html>
Line 479  to be somewhat persistent. Line 525  to be somewhat persistent.
 ######################################################################  ######################################################################
   
 sub make_persistent {  sub make_persistent {
       my %save = %{shift()};
     my $persistent='';      my $persistent='';
     foreach (keys %ENV) {      foreach (keys %save) {
  if (/^form\./ && !/submit/) {   if (/^form\./ && !/submit/) {
     my $name=$_;      my $name=$_;
     my $key=$name;              my @values = (ref($save{$name}) ? @{$save{$name}} : ($save{$name}));
     $ENV{$key}=~s/\'//g; # do not mess with html field syntax  
     $name=~s/^form\.//;      $name=~s/^form\.//;
     $persistent.=<<END;              foreach (@values) {
 <input type="hidden" name="$name" value="$ENV{$key}" />                  s/\"/\'/g; # do not mess with html field syntax
                   $persistent.=<<END;
   <input type="hidden" name="$name" value="$_" />
 END  END
               }
         }          }
     }      }
     return $persistent;      return $persistent;
Line 534  the day, month, and year. Line 583  the day, month, and year.
   
 =item &selectbox()  =item &selectbox()
   
 Returns html selection form.  Returns a scalar containing an html <select> form.  
   
   Inputs: 
   
   =over 4
   
   =item $title 
   
   Printed above the select box, in uppercase.
   
   =item $name 
   
   The name element of the <select> tag.
   
   =item $default 
   
   The default value of the form.  Can be $anyvalue or in @idlist.
   
   =item $anyvalue 
   
   The <option value="..."> used to indicate a default of 
   none of the values.
   
   =item $anytag 
   
   The text associate with $anyvalue above.
   
   =item $functionref 
   
   Each element in @idlist will be passed as a parameter 
   to the function referenced here.  The return value of the function should
   be a scalar description of the items.  If this value is undefined the 
   description of each item in @idlist will be the item name.
   
   =item @idlist 
   
   The items to be selected from.  One of these or $anyvalue will be the 
   value returned by the form element, $ENV{form.$name}.
   
   =back
   
 =back   =back 
   
Line 553  sub simpletextfield { Line 641  sub simpletextfield {
 sub simplecheckbox {  sub simplecheckbox {
     my ($name,$value)=@_;      my ($name,$value)=@_;
     my $checked='';      my $checked='';
     $checked="CHECKED" if $value eq 'on';      $checked="checked" if $value eq 'on';
     return '<input type="checkbox" name="'.$name.'" '. $checked . ' />';      return '<input type="checkbox" name="'.$name.'" '. $checked . ' />';
 }  }
   
 sub searchphrasefield {  sub searchphrasefield {
     my ($title,$name,$value)=@_;      my ($title,$name,$value)=@_;
     my $instruction=<<END;  
 Enter terms or phrases separated by search operators such as AND, OR, or NOT.  
 END  
     my $uctitle=uc($title);      my $uctitle=uc($title);
     return "\n".      return '<tr><td><font color="#800000" face="helvetica">'.
         '<p><font color="#800000" face="helvetica"><b>'.$uctitle.':</b>'.          '<b>'.$uctitle.':&nbsp;</b></font></td><td>'.
         "</FONT> $instruction<br />".&simpletextfield($name,$value,80);                  &simpletextfield($name,$value,50)."</td></tr>\n";
 }  }
   
 sub dateboxes {  sub dateboxes {
Line 613  END Line 698  END
 }  }
   
 sub selectbox {  sub selectbox {
     my ($title,$name,$value,$anyvalue,$anytag,$functionref,@idlist)=@_;      my ($title,$name,$default,$anyvalue,$anytag,$functionref,@idlist)=@_;
       if (! defined($functionref)) { $functionref = sub { $_[0]}; }
     my $uctitle=uc($title);      my $uctitle=uc($title);
     my $selout="\n".'<p><font color="#800000" face="helvetica">'.      my $selout="\n".'<p><font color="#800000" face="helvetica">'.
         '<b>'.$uctitle.':</b></font><br /><select name="'.$name.'">';          '<b>'.$uctitle.': </b></font><select name="'.$name.'">';
     foreach ($anyvalue,@idlist) {      foreach ($anyvalue,@idlist) {
         $selout.='<option value="'.$_.'"';          $selout.='<option value="'.$_.'"';
         if ($_ eq $value and !/^any$/) {          if ($_ eq $default and !/^any$/) {
     $selout.=' selected >'.&{$functionref}($_).'</option>';      $selout.=' selected >'.&{$functionref}($_).'</option>';
  }   }
  elsif ($_ eq $value and /^$anyvalue$/) {   elsif ($_ eq $default and /^$anyvalue$/) {
     $selout.=' selected >'.$anytag.'</option>';      $selout.=' selected >'.$anytag.'</option>';
  }   }
         else {$selout.='>'.&{$functionref}($_).'</option>';}          else {$selout.='>'.&{$functionref}($_).'</option>';}
     }      }
     return $selout.'</select>';      return $selout.'</select></p>';
 }  }
   
 ######################################################################  ######################################################################
Line 644  Parse advanced search results. Line 730  Parse advanced search results.
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################
 sub advancedsearch {  sub advancedsearch {
     my ($r,$envhash,$hidden)=@_;      my ($r,$hidden)=@_;
     my %ENV=%{$envhash};  
     my $fillflag=0;      my $fillflag=0;
     # Clean up fields for safety      # Clean up fields for safety
     for my $field ('title','author','subject','keywords','url','version',      for my $field ('title','author','subject','keywords','url','version',
Line 656  sub advancedsearch { Line 741  sub advancedsearch {
    'lastrevisiondatestart_year','lastrevisiondateend_month',     'lastrevisiondatestart_year','lastrevisiondateend_month',
    'lastrevisiondateend_day','lastrevisiondateend_year',     'lastrevisiondateend_day','lastrevisiondateend_year',
    'notes','abstract','mime','language','owner',     'notes','abstract','mime','language','owner',
    'custommetadata','customshow') {     'custommetadata','customshow','category') {
  $ENV{"form.$field"}=~s/[^\w\/\s\(\)\=\-\"\']//g;   $ENV{"form.$field"}=~s/[^\w\/\s\(\)\=\-\"\']//g;
     }      }
     foreach ('mode','form','element') {      foreach ('mode','form','element') {
Line 665  sub advancedsearch { Line 750  sub advancedsearch {
  $ENV{"form.$_"}=&Apache::lonnet::unescape($ENV{"form.$_"});   $ENV{"form.$_"}=&Apache::lonnet::unescape($ENV{"form.$_"});
  $ENV{"form.$_"}=~s/[^\w\/\s\(\)\=\-\"\']//g;   $ENV{"form.$_"}=~s/[^\w\/\s\(\)\=\-\"\']//g;
     }      }
       # Preprocess the category form element.
       if ($ENV{'form.category'} ne 'any') {
           my @extensions = &Apache::loncommon::filecategorytypes
               ($ENV{'form.category'});
           $ENV{'form.mime'} = join ' OR ',@extensions;
       }
     # Check to see if enough information was filled in      # Check to see if enough information was filled in
     for my $field ('title','author','subject','keywords','url','version',      for my $field ('title','author','subject','keywords','url','version',
    'notes','abstract','mime','language','owner',     'notes','abstract','mime','language','owner',
Line 682  sub advancedsearch { Line 773  sub advancedsearch {
     my @queries;      my @queries;
     # Evaluate logical expression AND/OR/NOT phrase fields.      # Evaluate logical expression AND/OR/NOT phrase fields.
     foreach my $field ('title','author','subject','notes','abstract','url',      foreach my $field ('title','author','subject','notes','abstract','url',
        'keywords','version','owner') {         'keywords','version','owner','mime') {
  if ($ENV{'form.'.$field}) {   if ($ENV{'form.'.$field}) {
     push @queries,&build_SQL_query($field,$ENV{'form.'.$field});      push @queries,&build_SQL_query($field,$ENV{'form.'.$field});
  }          }
     }      }
     # 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'}\")";
     }      }
     if ($ENV{'form.mime'} and $ENV{'form.mime'} ne 'any') {  
  push @queries,"(mime like \"$ENV{'form.mime'}\")";  
     }  
     if ($ENV{'form.copyright'} and $ENV{'form.copyright'} ne 'any') {      if ($ENV{'form.copyright'} and $ENV{'form.copyright'} ne 'any') {
  push @queries,"(copyright like \"$ENV{'form.copyright'}\")";   push @queries,"(copyright like \"$ENV{'form.copyright'}\")";
     }      }
Line 733  sub advancedsearch { Line 821  sub advancedsearch {
  my @fields=split(/\s+/,$customshow);   my @fields=split(/\s+/,$customshow);
  $customshow=join(" ",@fields);   $customshow=join(" ",@fields);
     }      }
       ## ---------------------------------------------------------------
       ## Deal with restrictions to given domains
       ## 
       my $libraries_to_query = undef;
       # $ENV{'form.domains'} can be either a scalar or an array reference.
       # We need an array.
       my @allowed_domains = (ref($ENV{'form.domains'}) ? @{$ENV{'form.domains'}} 
                              :  ($ENV{'form.domains'}) );
       my %domain_hash = ();
       foreach (@allowed_domains) {
           $domain_hash{$_}++;
       }
       foreach (keys(%Apache::lonnet::libserv)) {
           if ($_ eq 'any') {
               $libraries_to_query = undef;
               last;
           }
           if (exists($domain_hash{$Apache::lonnet::hostdom{$_}})) {
               push @$libraries_to_query,$_;
           }
       }
       ## ---------------------------------------------------------------
       #
     # Send query statements over the network to be processed by either the SQL      # Send query statements over the network to be processed by either the SQL
     # database or a recursive scheme of 'grep'-like actions (for custom      # database or a recursive scheme of 'grep'-like actions (for custom
     # metadata).      # metadata).
Line 741  sub advancedsearch { Line 852  sub advancedsearch {
  $query="select * from metadata where $query";   $query="select * from metadata where $query";
  my $reply; # reply hash reference   my $reply; # reply hash reference
  unless ($customquery or $customshow) {   unless ($customquery or $customshow) {
     $reply=&Apache::lonnet::metadata_query($query);              $reply=&Apache::lonnet::metadata_query($query,undef,undef,
                                                      $libraries_to_query);
  }   }
  else {   else {
     $reply=&Apache::lonnet::metadata_query($query,      $reply=&Apache::lonnet::metadata_query($query,
    $customquery,$customshow);     $customquery,$customshow,
                                                      $libraries_to_query);
  }   }
  &output_results('Advanced',$r,$envhash,$customquery,$reply,$hidden);   &output_results('Advanced',$r,$customquery,$reply,$hidden);
         return OK;          return OK;
     } 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,$hidden);                                                 $libraries_to_query);
    &output_results('Advanced',$r,$customquery,$reply,$hidden);
         return OK;          return OK;
     }      }
     # should not get to this point      # should not get to this point
Line 774  Parse basic search form. Line 888  Parse basic search form.
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################
 sub basicsearch {  sub basicsearch {
     my ($r,$envhash,$hidden)=@_;      my ($r,$hidden)=@_;
     my %ENV=%{$envhash};  
     # Clean up fields for safety      # Clean up fields for safety
     for my $field ('basicexp') {      for my $field ('basicexp') {
  $ENV{"form.$field"}=~s/[^\w\s\(\)\-]//g;   $ENV{"form.$field"}=~s/[^\w\s\(\)\-]//g;
Line 808  sub basicsearch { Line 921  sub basicsearch {
 #    &Apache::lonnet::logthis("metadata query finished:".time);  #    &Apache::lonnet::logthis("metadata query finished:".time);
     # Output search results      # Output search results
   
     &output_results('Basic',$r,$envhash,$query,$reply,$hidden);      &output_results('Basic',$r,$query,$reply,$hidden);
   
     return OK;      return OK;
 }  }
Line 1000  contacted, etc.) Line 1113  contacted, etc.)
 sub output_results {  sub output_results {
 #    &Apache::lonnet::logthis("output_results:".time);  #    &Apache::lonnet::logthis("output_results:".time);
     my $fnum; # search result counter      my $fnum; # search result counter
     my ($mode,$r,$envhash,$query,$replyref,$hidden)=@_;      my ($mode,$r,$query,$replyref,$hidden)=@_;
     my %ENV=%{$envhash};  
     my %rhash=%{$replyref};      my %rhash=%{$replyref};
     my $compiledresult='';      my $compiledresult='';
     my $timeremain=300; # (seconds)      my $timeremain=300; # (seconds)
     my $elapsetime=0;      my $elapsetime=0;
     my $resultflag=0;      my $resultflag=0;
     my $tflag=1;      my $tflag=1;
       my $viewselect=$ENV{'form.viewselect'};
     #      #
     # make query information persistent to allow for subsequent revision      # make query information persistent to allow for subsequent revision
     my $persistent=&make_persistent();      my $persistent=&make_persistent(\%ENV);
     # spit out the generic header      # spit out the results header
     $r->print(&search_results_header());      $r->print(&search_results_header($mode));
     $r->rflush();      $r->rflush();
     # begin showing the cataloged results      # begin showing the cataloged results
     $r->print(<<CATALOGBEGIN);      my $action = "/adm/searchcat";
 </head>      if ($mode eq 'Basic') { 
 <body bgcolor="#ffffff">          $action .= "?reqinterface=basic";
 <img align=right src=/adm/lonIcons/lonlogos.gif>      } elsif ($mode eq 'Advanced') {
 <h1>Search Catalog</h1>          $action .= "?reqinterface=advanced";
 CATALOGBEGIN      }
         $r->print(<<CATALOGCONTROLS);      $r->print(<<CATALOGCONTROLS);
 <form name='results' method="post" action="/adm/searchcat">  <form name='results' method="post" action="$action">
 $hidden  $hidden
 <input type='hidden' name='acts' value='' />  <input type='hidden' name='acts' value='' />
 <input type='button' value='Revise search request'  <input type='button' value='Revise search request'
Line 1031  $importbutton Line 1144  $importbutton
 $closebutton  $closebutton
 $persistent  $persistent
 <hr />  <hr />
 <h3>Search Query</h3>  
 CATALOGCONTROLS  CATALOGCONTROLS
     #      #
     # Remind them what they searched for  
     #  
     if ($mode eq 'Basic') {  
  $r->print('<p><b>Basic search:</b> '.$ENV{'form.basicexp'}.'</p>');  
     } elsif ($mode eq 'Advanced') {  
  $r->print('<p><b>Advanced search</b> '.$query.'</p>');  
     }  
     $r->print('<h3>Search Results</h3>');  
     $r->rflush();  
     #  
     # make the pop-up window for status      # make the pop-up window for status
     #      #
     $r->print(&make_popwin(%rhash));      $r->print(&make_popwin(%rhash));
Line 1147  CATALOGCONTROLS Line 1249  CATALOGCONTROLS
                         $Fields{'extrashow'}=~s/\<\!\-\- $field \-\-\>/ $value/g;                          $Fields{'extrashow'}=~s/\<\!\-\- $field \-\-\>/ $value/g;
                     }                      }
                 }                  }
                 if ($compiledresult or $servercount!=$servernum) {  
                     $compiledresult.="<hr align='left' width='200' noshade />";  
                 }  
                 $compiledresult.="\n<p>\n";                  $compiledresult.="\n<p>\n";
                 if ($ENV{'form.catalogmode'} eq 'interactive') {                  if ($ENV{'form.catalogmode'} eq 'interactive') {
                     my $titleesc=$Fields{'title'};                      my $titleesc=$Fields{'title'};
Line 1176  END Line 1275  END
 # <input type="hidden" name="url$fnum" value="$url" />  # <input type="hidden" name="url$fnum" value="$url" />
                     $fnum++;                      $fnum++;
  }   }
         my $viewselect;  
         if ($mode eq 'Basic') {  
     $viewselect=$ENV{'form.basicviewselect'};  
  }  
         elsif ($mode eq 'Advanced') {  
     $viewselect=$ENV{'form.advancedviewselect'};  
  }  
         if ($viewselect eq 'Detailed Citation View') {          if ($viewselect eq 'Detailed Citation View') {
     $compiledresult.=&detailed_citation_view      $compiledresult.=&detailed_citation_view
                         (%Fields, hostname => $rkey );                          (%Fields, hostname => $rkey );
Line 1199  END Line 1291  END
     $compiledresult.=&xml_sgml_view      $compiledresult.=&xml_sgml_view
                         (%Fields, hostname => $rkey );                          (%Fields, hostname => $rkey );
  }   }
                   if ($compiledresult or $servercount!=$servernum) {
                       $compiledresult.="<hr align='left' width='200' noshade />";
                   }
             }              }
             untie %hash;              untie %hash;
         }          }
Line 1347  sub handle_custom_fields { Line 1442  sub handle_custom_fields {
   
 =item &search_results_header  =item &search_results_header
   
 Output the proper javascript code to deal with different calling modes.  Output the proper html headers and javascript code to deal with different 
   calling modes.
   
 Takes inputs directly from from %ENV.  The following environment variables  Takes most inputs directly from %ENV, except $mode.  
 are checked:  
   =over 4
   
   =item $mode is either (at this writing) 'Basic' or 'Advanced'
   
   =back
   
   The following environment variables are checked:
   
 =over 4  =over 4
   
Line 1373  Checked for existance & 'edit' mode. Line 1476  Checked for existance & 'edit' mode.
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################
 sub search_results_header {  sub search_results_header {
       my ($mode) = @_;
       $mode = lc($mode);
       my $title;
       if ($mode eq 'advanced') {
           $title = "Advanced Search Results";
       } elsif ($mode eq 'basic') {
           $title = "Basic Search Results";
       }
     my $result = '';      my $result = '';
     # output beginning of search page      # output beginning of search page
     $result.=<<BEGINNING;      $result.=<<BEGINNING;
 <html>  <html>
 <head>  <head>
 <title>The LearningOnline Network with CAPA</title>  <title>$title</title>
 BEGINNING  BEGINNING
     # conditional output of script functions dependent on the mode in      # conditional output of script functions dependent on the mode in
     # which the search was invoked      # which the search was invoked
Line 1461  SCRIPT Line 1572  SCRIPT
     }      }
 </script>  </script>
 SCRIPT  SCRIPT
       $result.=<<END;
   </head>
   <body bgcolor="#ffffff">
   <img align=right src=/adm/lonIcons/lonlogos.gif>
   <h1>$title</h1>
   END
     return $result;      return $result;
 }  }
   
Line 1584  extra custom metadata to show. Line 1701  extra custom metadata to show.
 sub detailed_citation_view {  sub detailed_citation_view {
     my %values = @_;      my %values = @_;
     my $result=<<END;      my $result=<<END;
 <i>$values{'owner'}</i>, last revised $values{'lastrevisiondate'}  
 <h3><a href="http://$ENV{'HTTP_HOST'}$values{'url'}"   <h3><a href="http://$ENV{'HTTP_HOST'}$values{'url'}" 
     target='search_preview'>$values{'title'}</a></h3>      target='search_preview'>$values{'title'}</a></h3>
 <h3>$values{'author'}</h3>  
 </p>  
 <p>  <p>
 <b>Subject:</b> $values{'subject'}<br />  <b>$values{'author'}</b>, <i>$values{'owner'}</i><br />
 <b>Keyword(s):</b> $values{'keywords'}<br />  
 <b>Notes:</b> $values{'notes'}<br />  <b>Subject:       </b> $values{'subject'}<br />
 <b>MIME Type:</b>  <b>Keyword(s):    </b> $values{'keywords'}<br />
 END  <b>Notes:         </b> $values{'notes'}<br />
     $result.=&Apache::loncommon::filedescription($values{'mime'});  <b>MIME Type:     </b> $values{'mimetag'}<br />
     $result.=<<END;  <b>Language:      </b> $values{'language'}<br />
 <br />  <b>Copyright/Distribution:</b> $values{'cprtag'}<br />
 <b>Language:</b>   
 END  
     $result.=&Apache::loncommon::languagedescription($values{'lang'});  
     $result.=<<END;  
 <br />  
 <b>Copyright/Distribution:</b>   
 END  
     $result.=&Apache::loncommon::copyrightdescription($values{'copyright'});  
     $result.=<<END;  
 <br />  
 </p>  </p>
 $values{'extrashow'}  $values{'extrashow'}
 <p>  <p>
Line 1761  sub filled { Line 1865  sub filled {
 sub output_blank_field_error {  sub output_blank_field_error {
     my ($r)=@_;      my ($r)=@_;
     # make query information persistent to allow for subsequent revision      # make query information persistent to allow for subsequent revision
     my $persistent=&make_persistent();      my $persistent=&make_persistent(\%ENV);
   
     $r->print(<<BEGINNING);      $r->print(<<BEGINNING);
 <html>  <html>
Line 1807  Output a full html page with an error me Line 1911  Output a full html page with an error me
 sub output_date_error {  sub output_date_error {
     my ($r,$message)=@_;      my ($r,$message)=@_;
     # make query information persistent to allow for subsequent revision      # make query information persistent to allow for subsequent revision
     my $persistent=&make_persistent();      my $persistent=&make_persistent(\%ENV);
   
     $r->print(<<RESULTS);      $r->print(<<RESULTS);
 <html>  <html>

Removed from v.1.127  
changed lines
  Added in v.1.133


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