Diff for /loncom/interface/lonsearchcat.pm between versions 1.147 and 1.148

version 1.147, 2002/07/30 18:30:56 version 1.148, 2002/07/30 20:08:04
Line 221  sub handler { Line 221  sub handler {
     ##      ##
     untie %groupsearch_db if (tied(%groupsearch_db));      untie %groupsearch_db if (tied(%groupsearch_db));
     if ($ENV{'form.launch'} eq '1') {      if ($ENV{'form.launch'} eq '1') {
  if (tie(%groupsearch_db,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) {   if (tie(%groupsearch_db,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) {
     &start_fresh_session();      &start_fresh_session();
     untie %groupsearch_db;      untie %groupsearch_db;
  } else {   } else {
Line 283  END Line 283  END
             ($ENV{'form.phase'} eq 'adv_search')) {              ($ENV{'form.phase'} eq 'adv_search')) {
         # Set up table          # Set up table
         if (! defined(&create_results_table())) {          if (! defined(&create_results_table())) {
             my $error = &Apache::lonmysql::get_error();  
             $r->print(<<END);              $r->print(<<END);
 <html><head><title>Search Error</title></head>  <html><head><title>Search Error</title></head>
 <body>  <body>
 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.
 <pre>  
 ERROR:  
 $error  
 </pre>  
 </body>  </body>
 </html>  </html>
 END  END
Line 627  sub get_persistent_form_data { Line 622  sub get_persistent_form_data {
     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,
                            &GDBM_READER,0640));                             &GDBM_READER(),0640));
     #      #
     # These make sure we do not get array references printed out as 'values'.      # These make sure we do not get array references printed out as 'values'.
     my %arrays_allowed = ('form.category'=>1,'form.domains'=>1);      my %arrays_allowed = ('form.category'=>1,'form.domains'=>1);
Line 684  sub get_persistent_data { Line 679  sub get_persistent_data {
     my @Values;   # Return array      my @Values;   # Return array
     return undef if (! -e $filename);      return undef if (! -e $filename);
     return undef if (! tie(%persistent_db,'GDBM_File',$filename,      return undef if (! tie(%persistent_db,'GDBM_File',$filename,
                            &GDBM_READER,0640));                             &GDBM_READER(),0640));
     foreach my $name (@Vars) {      foreach my $name (@Vars) {
         if (! exists($persistent_db{$name})) {          if (! exists($persistent_db{$name})) {
             push @Values, undef;              push @Values, undef;
Line 725  sub make_persistent { Line 720  sub make_persistent {
     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 (! exists($save{$name}));
         next if (! defined($save{$name}) || $save{$name} eq '');          next if (! defined($save{$name}) || $save{$name} eq '');
Line 1603  sub create_results_table { Line 1598  sub create_results_table {
     }       } 
     return undef; # Error...      return undef; # Error...
 }  }
   
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################
   
Line 1628  sub write_status { Line 1624  sub write_status {
   
 =pod  =pod
   
   =item Search Status update functions
   
   Each of the following functions changes the values of one of the
   input fields used to display the search status to the user.
   
   =over 4
   
   =item &update_count_status()
   
   =item &update_contact_status()
   
   =item &update_read_status()
   
   =back
   
   =cut
   
   ######################################################################
   ######################################################################
   sub update_count_status {
       my ($r,$text) = @_;
       $text =~ s/\'/\\\'/g;
       $r->print
           ("<script>document.statusform.count.value = ' $text'</script>\n");
       $r->rflush();
   }
   
   sub update_contact_status {
       my ($r,$text) = @_;
       $text =~ s/\'/\\\'/g;
       $r->print
           ("<script>document.statusform.c_server.value = ' $text'</script>\n");
       $r->rflush();
   }
   
   sub update_read_status {
       my ($r,$text) = @_;
       $text =~ s/\'/\\\'/g;
       $r->print
           ("<script>document.statusform.r_server.value = ' $text'</script>\n");
       $r->rflush();
   }
   
   ######################################################################
   ######################################################################
   
   =pod
   
 =item &run_search   =item &run_search 
   
 =cut  =cut
Line 1636  sub write_status { Line 1680  sub write_status {
 ######################################################################  ######################################################################
 sub run_search {  sub run_search {
     my ($r,$query,$customquery,$customshow,$serverlist,$pretty_string) = @_;      my ($r,$query,$customquery,$customshow,$serverlist,$pretty_string) = @_;
       my $c = $r->connection;
     #      #
     # Timing variables      # Timing variables
     #      #
Line 1645  sub run_search { Line 1690  sub run_search {
     # Print run_search header      # Print run_search header
     #      #
     $r->print("<html><head><title>Search Status</title></head><body>");      $r->print("<html><head><title>Search Status</title></head><body>");
     $r->print("Search: ".$pretty_string."<br />\n");      $r->print("Search: ".$pretty_string."\n");
     $r->rflush();      $r->rflush();
     #      #
     # Determine the servers we need to contact.      # Determine the servers we need to contact.
Line 1660  sub run_search { Line 1705  sub run_search {
     my $table =$ENV{'form.table'};      my $table =$ENV{'form.table'};
     if (! defined($table) || $table eq '') {      if (! defined($table) || $table eq '') {
         $r->print("Unable to determine table id to store search results in.".          $r->print("Unable to determine table id to store search results in.".
                   "The search has been aborted.");                    "The search has been aborted.</body></html>");
         return;          return;
     }      }
     my $table_status = &Apache::lonmysql::check_table($table);      my $table_status = &Apache::lonmysql::check_table($table);
Line 1674  sub run_search { Line 1719  sub run_search {
     }      }
     if (! $table_status) {      if (! $table_status) {
         $r->print("The table id,$table, we tried to use is invalid.".          $r->print("The table id,$table, we tried to use is invalid.".
                   "The search has been aborted.");                    "The search has been aborted.</body></html>");
         return;          return;
     }      }
     ##      ##
Line 1683  sub run_search { Line 1728  sub run_search {
     my $hitcountsum;      my $hitcountsum;
     my $server;       my $server; 
     my $status;      my $status;
     $r->print("Searching");      $r->print(<<END);
   <form name="statusform" action="" method="post">
   <table>
   <tr><th>Contacting</th><th>Receiving</th><th>Total Matches</th></tr>
   <tr>
   <td><input type="text" name="c_server" value="" size="15" /></td>
   <td><input type="text" name="r_server" value="" size="15" /></td>
   <td><input type="text" name="count" value="" size="10" /></td>
   </tr>
   </table>
   </form>
   END
       $r->rflush();
     while ((time - $starttime < $max_time) &&       while ((time - $starttime < $max_time) && 
            ((@Servers_to_contact) || keys(%Server_status))) {             ((@Servers_to_contact) || keys(%Server_status))) {
         # Send out a search request if it needs to be done.          # Send out a search request if it needs to be done.
Line 1694  sub run_search { Line 1751  sub run_search {
                                                       $customshow,[$server]);                                                        $customshow,[$server]);
             ($server) = keys(%$reply);              ($server) = keys(%$reply);
             $Server_status{$server} = $reply->{$server};              $Server_status{$server} = $reply->{$server};
             # $r->print("Contacted:$server:reply:$Server_status{$server}");              &update_contact_status($r,$server);
             $r->print(" .");  
             $r->rflush();  
         } else {          } else {
               &update_contact_status($r,'none');
             sleep(1); # wait a sec. to give time for files to be written              sleep(1); # wait a sec. to give time for files to be written
         }          }
         while (my ($server,$status) = each(%Server_status)) {          while (my ($server,$status) = each(%Server_status)) {
               last if ($c->aborted());
             if ($status eq 'con_lost') {              if ($status eq 'con_lost') {
                 delete ($Server_status{$server});                  delete ($Server_status{$server});
                 # $r->print("server $server is not responding.");  
                 next;                  next;
             }              }
             $status=~/^([\.\w]+)$/;               $status=~/^([\.\w]+)$/; 
            my $datafile=$r->dir_config('lonDaemons').'/tmp/'.$1;             my $datafile=$r->dir_config('lonDaemons').'/tmp/'.$1;
             if (-e $datafile && ! -e "$datafile.end") {              if (-e $datafile && ! -e "$datafile.end") {
                 # Let the user know we are receiving data from the server  
                 # $r->print("$server:Receiving file");  
                 next;                  next;
             }              }
               last if ($c->aborted());
             if (-e "$datafile.end") {              if (-e "$datafile.end") {
                   &update_read_status($r,$server);
                 if (-z "$datafile") {                  if (-z "$datafile") {
                     delete($Server_status{$server});                      delete($Server_status{$server});
                     next;                      next;
Line 1729  sub run_search { Line 1785  sub run_search {
                 }                  }
                 # Read in the whole file.                  # Read in the whole file.
                 while (my $result = <$fh>) {                  while (my $result = <$fh>) {
                       last if ($c->aborted());
                     # handle custom fields?  Someday we will!                      # handle custom fields?  Someday we will!
                     chomp($result);                      chomp($result);
                     next unless $result;                      next unless $result;
Line 1743  sub run_search { Line 1800  sub run_search {
                     }                      }
                     # $r->print(&Apache::lonmysql::get_debug());                      # $r->print(&Apache::lonmysql::get_debug());
                     $hitcountsum ++;                      $hitcountsum ++;
                       &update_count_status($r,$hitcountsum) if ($hitcountsum % 50 == 0);
                 } # End of foreach (@results)                  } # End of foreach (@results)
                 $fh->close();                  $fh->close();
                 # $server is only deleted if the results file has been                   # $server is only deleted if the results file has been 
Line 1751  sub run_search { Line 1809  sub run_search {
                 # $r->print("Received $new_count more results from ".                  # $r->print("Received $new_count more results from ".
                 #              $server.".");                  #              $server.".");
             }              }
               last if ($c->aborted());
               &update_count_status($r,$hitcountsum);
         }          }
           last if ($c->aborted());
         # Finished looping through the servers          # Finished looping through the servers
     }      }
       &update_read_status($r,'none');
     &Apache::lonmysql::disconnect_from_db();      &Apache::lonmysql::disconnect_from_db();
     # Let the user know      # Let the user know
     #      #
     # 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("<br /><b>Search Completed</b><br />");      $r->print("<b>Search Completed.</b>&nbsp;&nbsp;");
     if ($hitcountsum) {      if ($hitcountsum) {
         $r->print($hitcountsum." successful matches were found.<br />");          $r->print($hitcountsum." matches were found.");
     } else {      } else {
         $r->print("There were no successful matches to your query.<br />");          $r->print("There were no successful matches to your query.");
     }      }
     $r->print("</body></html>");      $r->print("</body></html>");
     return;      return;
Line 1845  sub display_results { Line 1907  sub display_results {
     ##      ##
     if ($ENV{'form.catalogmode'} eq 'groupsearch') {      if ($ENV{'form.catalogmode'} eq 'groupsearch') {
         if (! tie(%groupsearch_db,'GDBM_File',$diropendb,          if (! tie(%groupsearch_db,'GDBM_File',$diropendb,
                   &GDBM_WRCREAT,0640)) {                    &GDBM_WRCREAT(),0640)) {
             $r->print('Unable to tie hash to db file</body></html>');              $r->print('Unable to tie hash to db file</body></html>');
             $r->rflush();              $r->rflush();
             return;              return;
Line 1907  sub display_results { Line 1969  sub display_results {
     ##      ##
     $r->print("<center>Results $min to $max out of $total_results</center>\n");      $r->print("<center>Results $min to $max out of $total_results</center>\n");
     $r->print      $r->print
         ('<br /><center>'.          ('<center>'.
          &prev_next_buttons($min,$ENV{'form.show'},$total_results,           &prev_next_buttons($min,$ENV{'form.show'},$total_results,
                             "table=".$ENV{'form.table'}.                              "table=".$ENV{'form.table'}.
                             "&phase=results".                              "&phase=results".
                             "&persistent_db_id=".$ENV{'form.persistent_db_id'})                              "&persistent_db_id=".$ENV{'form.persistent_db_id'})
          ."</center><br />\n"           ."</center>\n"
          );           );
     ##      ##
     ## Get results from MySQL table      ## Get results from MySQL table
Line 1937  sub display_results { Line 1999  sub display_results {
         $r->print("There were no results matching your query");          $r->print("There were no results matching your query");
     } else {      } else {
         $r->print          $r->print
             ('<br /><center>'.              ('<center>'.
              &prev_next_buttons($min,$ENV{'form.show'},$total_results,               &prev_next_buttons($min,$ENV{'form.show'},$total_results,
                                 "table=".$ENV{'form.table'}.                                  "table=".$ENV{'form.table'}.
                                 "&phase=results".                                  "&phase=results".
                                 "&persistent_db_id=".                                  "&persistent_db_id=".
                                 $ENV{'form.persistent_db_id'})                                  $ENV{'form.persistent_db_id'})
              ."</center><br />\n"               ."</center>\n"
              );               );
     }      }
     $r->print("</body></html>");      $r->print("</body></html>");

Removed from v.1.147  
changed lines
  Added in v.1.148


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