Diff for /loncom/interface/lonsearchcat.pm between versions 1.151 and 1.155

version 1.151, 2002/08/04 18:28:01 version 1.155, 2002/08/26 14:34:19
Line 115  that produces it.  Adding a new view typ Line 115  that produces it.  Adding a new view typ
 adding a line to the definition of this hash and making sure the function  adding a line to the definition of this hash and making sure the function
 takes the proper parameters.  takes the proper parameters.
   
   =item $bodytag
   
   LON-CAPA standard body tag, gotten from &Apache::lonnet::bodytag.
   No title, no table, just a <body> tag.
   
 =back   =back 
   
 =cut  =cut
Line 136  my %Views = ("Detailed Citation View" => Line 141  my %Views = ("Detailed Citation View" =>
              "Compact View"           => \&compact_view);               "Compact View"           => \&compact_view);
 my %persistent_db;  my %persistent_db;
 my $hidden_fields;  my $hidden_fields;
   my $bodytag;
   
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################
   
Line 201  sub handler { Line 208  sub handler {
         ($ENV{'form.launch'} eq '1')) {          ($ENV{'form.launch'} eq '1')) {
         $ENV{'form.persistent_db_id'} = time;          $ENV{'form.persistent_db_id'} = time;
     }      }
       $bodytag=&Apache::loncommon::bodytag(undef,undef,undef,1);
     my $persistent_db_file = "/home/httpd/perl/tmp/".      my $persistent_db_file = "/home/httpd/perl/tmp/".
         &Apache::lonnet::escape($domain).          &Apache::lonnet::escape($domain).
             '_'.&Apache::lonnet::escape($ENV{'user.name'}).              '_'.&Apache::lonnet::escape($ENV{'user.name'}).
                 '_'.$ENV{'form.persistent_db_id'}.'_persistent_search.db';                  '_'.$ENV{'form.persistent_db_id'}.'_persistent_search.db';
     ##      ##
     if (! &get_persistent_form_data($r,$persistent_db_file)) {      if (! &get_persistent_form_data($persistent_db_file)) {
         if ($ENV{'form.phase'} =~ /(run_search|results)/) {          if ($ENV{'form.phase'} =~ /(run_search|results)/) {
             &Apache::lonnet::logthis("lonsearchcat:Unable to recover data ".              &Apache::lonnet::logthis("lonsearchcat:Unable to recover data ".
                                      "from $persistent_db_file");                                       "from $persistent_db_file");
             $r->print(<<END);              $r->print(<<END);
 <html>  <html>
 <head><title>LON-CAPA Search Error</title></head>  <head><title>LON-CAPA Search Error</title></head>
 <body>  $bodytag
 We were unable to retrieve data describing your search.  This is a serious  We were unable to retrieve data describing your search.  This is a serious
 error and has been logged.  Please alert your LON-CAPA administrator.  error and has been logged.  Please alert your LON-CAPA administrator.
 </body>  </body>
Line 233  END Line 241  END
     &start_fresh_session();      &start_fresh_session();
     untie %groupsearch_db;      untie %groupsearch_db;
  } else {   } else {
     $r->print('<html><head></head><body>Unable to tie hash to db '.              # This is a stupid error to give to the user.  
       'file</body></html>');              # It really tells them nothing.
       $r->print('<html><head></head>'.$bodytag.
                         'Unable to tie hash to db file</body></html>');
     return OK;      return OK;
  }   }
     }      }
Line 329  END Line 339  END
         if (! defined(&create_results_table())) {          if (! defined(&create_results_table())) {
             $r->print(<<END);              $r->print(<<END);
 <html><head><title>Search Error</title></head>  <html><head><title>Search Error</title></head>
 <body>  $bodytag
 Unable to create table in which to store search results.    Unable to create table in which to store search results.  
 The search has been aborted.  The search has been aborted.
 </body>  </body>
Line 341  END Line 351  END
         if (! &make_form_data_persistent($r,$persistent_db_file)) {          if (! &make_form_data_persistent($r,$persistent_db_file)) {
             $r->print(<<END);              $r->print(<<END);
 <html><head><title>Search Error</title></head>  <html><head><title>Search Error</title></head>
 <body>  $bodytag
 Unable to properly store search information.  The search has been aborted.  Unable to properly store search information.  The search has been aborted.
 </body>  </body>
 </html>  </html>
Line 360  END Line 370  END
                 = &parse_advanced_search($r,$closebutton);                  = &parse_advanced_search($r,$closebutton);
             return OK if (! defined($query));              return OK if (! defined($query));
         }          }
         &make_persistent($r,          &make_persistent({ query => $query,
                          { query => $query,  
                            customquery => $customquery,                             customquery => $customquery,
                            customshow => $customshow,                             customshow => $customshow,
                            libraries => $libraries,                             libraries => $libraries,
Line 391  Returns a scalar which holds html for th Line 400  Returns a scalar which holds html for th
   
 sub print_basic_search_form{  sub print_basic_search_form{
     my ($r,$closebutton) = @_;      my ($r,$closebutton) = @_;
       my $bodytag=&Apache::loncommon::bodytag('Catalog Search');
     my $scrout=<<"ENDDOCUMENT";      my $scrout=<<"ENDDOCUMENT";
 <html>  <html>
 <head>  <head>
Line 403  sub print_basic_search_form{ Line 413  sub print_basic_search_form{
     }      }
 </script>  </script>
 </head>  </head>
 <body bgcolor="#FFFFFF">  $bodytag
 <img align='right' src='/adm/lonIcons/lonlogos.gif' />  
 <h1>Search Catalog</h1>  
 <form method="post" action="/adm/searchcat">  <form method="post" action="/adm/searchcat">
 <input type="hidden" name="phase" value="basic_search" />  <input type="hidden" name="phase" value="basic_search" />
 $hidden_fields  $hidden_fields
 <h3>Basic Search</h3>  
 <p>  <p>
 Enter terms or phrases separated by AND, OR, or NOT   Enter terms or phrases separated by AND, OR, or NOT 
 then press SEARCH below.  then press SEARCH below.
Line 475  END Line 482  END
     if (!defined($ENV{'form.viewselect'})) {      if (!defined($ENV{'form.viewselect'})) {
         $ENV{'form.viewselect'} ="Detailed Citation View";          $ENV{'form.viewselect'} ="Detailed Citation View";
     }      }
       my $bodytag=&Apache::loncommon::bodytag('Advanced Catalog Search');
     my $scrout=<<"ENDHEADER";      my $scrout=<<"ENDHEADER";
 <html>  <html>
 <head>  <head>
Line 487  END Line 495  END
     }      }
 </script>  </script>
 </head>  </head>
 <body bgcolor="#FFFFFF">  $bodytag
 <img align='right' src='/adm/lonIcons/lonlogos.gif' />  
 <h1>Advanced Catalog Search</h1>  
 <hr />  
 Enter terms or phrases separated by search operators   Enter terms or phrases separated by search operators 
 such as AND, OR, or NOT.<br />  such as AND, OR, or NOT.<br />
 <form method="post" action="/adm/searchcat">  <form method="post" action="/adm/searchcat">
Line 620  LASTREVISIONDATEEND Line 625  LASTREVISIONDATEEND
  (&Apache::loncommon::copyrightids),   (&Apache::loncommon::copyrightids),
  );   );
 # ------------------------------------------- Compute customized metadata field  # ------------------------------------------- Compute customized metadata field
     $scrout.=<<CUSTOMMETADATA;  #    $scrout.=<<CUSTOMMETADATA;
 <p>  #<p>
 <font color="#800000" face="helvetica"><b>LIMIT BY SPECIAL METADATA FIELDS:</b>  #<font color="#800000" face="helvetica"><b>LIMIT BY SPECIAL METADATA FIELDS:</b>
 </font>  #</font>
 For resource-specific metadata, enter in an expression in the form of   #For resource-specific metadata, enter in an expression in the form of 
 <i>key</i>=<i>value</i> separated by operators such as AND, OR or NOT.<br />  #<i>key</i>=<i>value</i> separated by operators such as AND, OR or NOT.<br />
 <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.=<<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>
 </font>  #</font>
 Enter in a space-separated list of special metadata fields to show  #Enter in a space-separated list of special metadata fields to show
 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.=<<ENDDOCUMENT;      $scrout.=<<ENDDOCUMENT;
 $advanced_buttons  $advanced_buttons
 </form>  </form>
Line 671  to them. Line 676  to them.
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################
 sub get_persistent_form_data {  sub get_persistent_form_data {
     my $r = shift;  
     my $filename = shift;      my $filename = shift;
     return 0 if (! -e $filename);      return 0 if (! -e $filename);
     return undef if (! tie(%persistent_db,'GDBM_File',$filename,      return undef if (! tie(%persistent_db,'GDBM_File',$filename,
Line 683  sub get_persistent_form_data { Line 687  sub get_persistent_form_data {
     # Loop through the keys, looking for 'form.'      # Loop through the keys, looking for 'form.'
     foreach my $name (keys(%persistent_db)) {      foreach my $name (keys(%persistent_db)) {
         next if ($name !~ /^form./);          next if ($name !~ /^form./);
           next if (exists($ENV{$name}));
         my @values = map {           my @values = map { 
             &Apache::lonnet::unescape($_);              &Apache::lonnet::unescape($_);
         } split(',',$persistent_db{$name});          } split(',',$persistent_db{$name});
         next if (@values <1);          next if (@values <1);
         if (exists($ENV{$name})) {          if ($arrays_allowed{$name}) {
             if (ref($ENV{$name}) eq 'ARRAY') {              $ENV{$name} = [@values];
                 # If it is an array, tack @values on the end of it.  
                 $ENV{$name} = [@$ENV{$name},@values];  
             } elsif (! ref($ENV{$name}) && $arrays_allowed{$name}) {  
                 # if arrays are allowed, turn it into one and add @values  
                 $ENV{$name} = [$ENV{$name},@values];  
             } # otherwise, assume the value in $ENV{$name} is better than ours.  
         } else {          } else {
             if ($arrays_allowed{$name}) {              $ENV{$name} = $values[0] if ($values[0]);
                 $ENV{$name} = [@values];  
             } else {  
                 $ENV{$name} = $values[0] if ($values[0]);  
             }  
         }          }
     }      }
     untie (%persistent_db);      untie (%persistent_db);
Line 741  sub get_persistent_data { Line 736  sub get_persistent_data {
         my @values = map {           my @values = map { 
             &Apache::lonnet::unescape($_);              &Apache::lonnet::unescape($_);
         } split(',',$persistent_db{$name});          } split(',',$persistent_db{$name});
         if (@values == 1) {          if (@values <= 1) {
             push @Values,$values[0];              push @Values,$values[0];
         } else {          } else {
             push @Values,\@values;              push @Values,\@values;
Line 769  elements escaped and concatenated in a c Line 764  elements escaped and concatenated in a c
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################
 sub make_persistent {  sub make_persistent {
     my $r = shift;  
     my %save = %{shift()};      my %save = %{shift()};
     my $filename = shift;      my $filename = shift;
     return undef if (! tie(%persistent_db,'GDBM_File',      return undef if (! tie(%persistent_db,'GDBM_File',
                            $filename,&GDBM_WRCREAT(),0640));                             $filename,&GDBM_WRCREAT(),0640));
     foreach my $name (keys(%save)) {      foreach my $name (keys(%save)) {
         next if (! exists($save{$name}));  
         next if (! defined($save{$name}) || $save{$name} eq '');  
         my @values = (ref($save{$name}) ? @{$save{$name}} : ($save{$name}));          my @values = (ref($save{$name}) ? @{$save{$name}} : ($save{$name}));
         # We handle array references, but not recursively.          # We handle array references, but not recursively.
         my $store = join(',', map { &Apache::lonnet::escape($_); } @values );          my $store = join(',', map { &Apache::lonnet::escape($_); } @values );
Line 811  sub make_form_data_persistent { Line 803  sub make_form_data_persistent {
         next if (!/^form/ || /submit/);          next if (!/^form/ || /submit/);
         $save{$_} = $ENV{$_};          $save{$_} = $ENV{$_};
     }      }
     return &make_persistent($r,\%save,$filename);      return &make_persistent(\%save,$filename);
 }  }
   
 ######################################################################  ######################################################################
Line 1230  sub parse_advanced_search { Line 1222  sub parse_advanced_search {
     }      }
     # Process form information for custom metadata querying      # Process form information for custom metadata querying
     my $customquery=undef;      my $customquery=undef;
     if ($ENV{'form.custommetadata'}) {  #    if ($ENV{'form.custommetadata'}) {
         $pretty_search_string .=$font."Custom Metadata Search</font>: <b>".  #        $pretty_search_string .=$font."Custom Metadata Search</font>: <b>".
             $ENV{'form.custommetadata'}."</b><br />\n";  #            $ENV{'form.custommetadata'}."</b><br />\n";
  $customquery=&build_custommetadata_query('custommetadata',  # $customquery=&build_custommetadata_query('custommetadata',
       $ENV{'form.custommetadata'});  #      $ENV{'form.custommetadata'});
     }  #    }
     my $customshow=undef;      my $customshow=undef;
     if ($ENV{'form.customshow'}) {  #    if ($ENV{'form.customshow'}) {
         $pretty_search_string .=$font."Custom Metadata Display</font>: <b>".  #        $pretty_search_string .=$font."Custom Metadata Display</font>: <b>".
             $ENV{'form.customshow'}."</b><br />\n";  #            $ENV{'form.customshow'}."</b><br />\n";
  $customshow=$ENV{'form.customshow'};  # $customshow=$ENV{'form.customshow'};
  $customshow=~s/[^\w\s]//g;  # $customshow=~s/[^\w\s]//g;
  my @fields=split(/\s+/,$customshow);  # my @fields=split(/\s+/,$customshow);
  $customshow=join(" ",@fields);  # $customshow=join(" ",@fields);
     }  #    }
     ## ---------------------------------------------------------------      ## ---------------------------------------------------------------
     ## Deal with restrictions to given domains      ## Deal with restrictions to given domains
     ##       ## 
Line 1259  sub parse_advanced_search { Line 1251  sub parse_advanced_search {
         $domain_hash{$_}++;          $domain_hash{$_}++;
     }      }
     if ($domain_hash{'any'}) {      if ($domain_hash{'any'}) {
         $pretty_domains_string = "Searching all domains.";          $pretty_domains_string = "In all LON-CAPA domains.";
     } else {      } else {
         if (@allowed_domains > 1) {          if (@allowed_domains > 1) {
             $pretty_domains_string = "Searching domains:";              $pretty_domains_string = "In LON-CAPA domains:";
         } else {          } else {
             $pretty_domains_string = "Searching domain ";              $pretty_domains_string = "In LON-CAPA domain ";
         }          }
         foreach (sort @allowed_domains) {          foreach (sort @allowed_domains) {
             $pretty_domains_string .= "<b>$_</b> ";              $pretty_domains_string .= "<b>".$_."</b> ";
         }          }
         foreach (keys(%Apache::lonnet::libserv)) {          foreach (keys(%Apache::lonnet::libserv)) {
             if (exists($domain_hash{$Apache::lonnet::hostdom{$_}})) {              if (exists($domain_hash{$Apache::lonnet::hostdom{$_}})) {
Line 1685  sub print_sort_form { Line 1677  sub print_sort_form {
 </script>  </script>
 <title>Results</title>  <title>Results</title>
 </head>  </head>
 <body>  $bodytag
 <form name="statusform" action="" method="post">  <form name="statusform" action="" method="post">
   <input type="hidden" name="Queue" value="" />
 END  END
   
 #<h2>Sort Results</h2>  #<h2>Sort Results</h2>
Line 1902  sub run_search { Line 1895  sub run_search {
     $r->print(<<END);      $r->print(<<END);
 <html>  <html>
 <head><title>Search Status</title></head>  <head><title>Search Status</title></head>
 <body>  $bodytag
 <form name="statusform" action="" method="post">  <form name="statusform" action="" method="post">
 <input type="hidden" name="Queue" value="" />  <input type="hidden" name="Queue" value="" />
 END  END
     # Check to see if $pretty_string has more than one carriage return.      # Check to see if $pretty_string has more than one carriage return.
     # Assume \n s are following <br /> s and truncate the value.      # Assume \n s are following <br /> s and truncate the value.
     # (there is probably a better way)...      # (there is probably a better way)...
     my @Lines = split /\n/,$pretty_string;      my @Lines = split /<br \/>/,$pretty_string;
     if (@Lines > 1) {      if (@Lines > 2) {
         $pretty_string = join /\n/,(@Lines[0..1],'....<br />');          $pretty_string = join '<br \>',(@Lines[0..2],'....<br />');
     }      }
     $r->print("Search: ".$pretty_string);      $r->print("Search: ".$pretty_string);
     $r->rflush();      $r->rflush();
Line 1920  END Line 1913  END
     #      #
     my @Servers_to_contact;      my @Servers_to_contact;
     if (defined($serverlist)) {      if (defined($serverlist)) {
         @Servers_to_contact = @$serverlist;          if (ref($serverlist) eq 'ARRAY') {
               @Servers_to_contact = @$serverlist;
           } else {
               @Servers_to_contact = ($serverlist);
           }
     } else {      } else {
         @Servers_to_contact = sort(keys(%Apache::lonnet::libserv));          @Servers_to_contact = sort(keys(%Apache::lonnet::libserv));
     }      }
Line 2061  END Line 2058  END
     # We have run out of time or run out of servers to talk to and      # We have run out of time or run out of servers to talk to and
     # results to get.        # results to get.  
     $r->print("</body></html>");      $r->print("</body></html>");
     $r->print("<script>window.location='/adm/searchcat?phase=sort&persistent_db_id=$ENV{'form.persistent_db_id'}';</script>");      if ($ENV{'form.catalogmode'} ne 'groupsearch') {
           $r->print("<script>".
                         "window.location='/adm/searchcat?".
                         "phase=sort&".
                         "persistent_db_id=$ENV{'form.persistent_db_id'}';".
                     "</script>");
       }
     return;      return;
 }  }
   
Line 2494  sub search_results_header { Line 2497  sub search_results_header {
  parent.close();   parent.close();
     }      }
     function changeTitle(val) {      function changeTitle(val) {
  if (opener.inf.document.forms.resinfo.elements.t) {   if (parent.opener.inf.document.forms.resinfo.elements.t) {
     opener.inf.document.forms.resinfo.elements.t.value=val;      parent.opener.inf.document.forms.resinfo.elements.t.value=val;
  }   }
     }      }
     function changeURL(val) {      function changeURL(val) {
  if (opener.inf.document.forms.resinfo.elements.u) {   if (parent.opener.inf.document.forms.resinfo.elements.u) {
     opener.inf.document.forms.resinfo.elements.u.value=val;      parent.opener.inf.document.forms.resinfo.elements.u.value=val;
  }   }
     }      }
 </script>  </script>
Line 2546  SCRIPT Line 2549  SCRIPT
 SCRIPT  SCRIPT
     $result.=<<END;      $result.=<<END;
 </head>  </head>
   $bodytag
 <form name="results" method="post" action="" >  <form name="results" method="post" action="" >
 <input type="hidden" name="Queue" value="" />  <input type="hidden" name="Queue" value="" />
 $importbutton  $importbutton
Line 2558  END Line 2562  END
 sub search_status_header {  sub search_status_header {
     return <<ENDSTATUS;      return <<ENDSTATUS;
 <html><head><title>Search Status</title></head>  <html><head><title>Search Status</title></head>
 <body>  $bodytag
 <h3>Search Status</h3>  <h3>Search Status</h3>
 Sending search request to LON-CAPA servers.<br />  Sending search request to LON-CAPA servers.<br />
 ENDSTATUS  ENDSTATUS
Line 2830  sub output_blank_field_error { Line 2834  sub output_blank_field_error {
 BEGINNING  BEGINNING
     $r->print(<<RESULTS);      $r->print(<<RESULTS);
 </head>  </head>
 <body bgcolor="#ffffff">  $bodytag
 <img align='right' src='/adm/lonIcons/lonlogos.gif' />  <img align='right' src='/adm/lonIcons/lonlogos.gif' />
 <h1>Search Catalog</h1>  <h1>Search Catalog</h1>
 <form method="post" action="/adm/searchcat">  <form method="post" action="/adm/searchcat">
Line 2877  sub output_date_error { Line 2881  sub output_date_error {
 <head>  <head>
 <title>The LearningOnline Network with CAPA</title>  <title>The LearningOnline Network with CAPA</title>
 </head>  </head>
 <body bgcolor="#ffffff">  $bodytag
 <img align='right' src='/adm/lonIcons/lonlogos.gif' />  <img align='right' src='/adm/lonIcons/lonlogos.gif' />
 <h1>Search Catalog</h1>  <h1>Search Catalog</h1>
 <form method="post" action="/adm/searchcat">  <form method="post" action="/adm/searchcat">

Removed from v.1.151  
changed lines
  Added in v.1.155


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