Diff for /loncom/interface/lonsearchcat.pm between versions 1.242 and 1.243

version 1.242, 2005/04/01 19:57:23 version 1.243, 2005/04/07 06:56:23
Line 63  package Apache::lonsearchcat; Line 63  package Apache::lonsearchcat;
   
 use strict;  use strict;
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
 use Apache::lonnet();  use Apache::lonnet;
 use Apache::File();  use Apache::File();
 use CGI qw(:standard);  use CGI qw(:standard);
 use Text::Query;  use Text::Query;
Line 144  sub handler { Line 144  sub handler {
     ##     printing the results.  We only need (theoretically) to do      ##     printing the results.  We only need (theoretically) to do
     ##     this once, so the pause indicator is deleted      ##     this once, so the pause indicator is deleted
     ##      ##
     if (exists($ENV{'form.pause'})) {      if (exists($env{'form.pause'})) {
         sleep(1);          sleep(1);
         delete($ENV{'form.pause'});          delete($env{'form.pause'});
     }      }
     ##      ##
     ## Initialize global variables      ## Initialize global variables
     ##      ##
     my $domain  = $r->dir_config('lonDefDomain');      my $domain  = $r->dir_config('lonDefDomain');
     $diropendb= "/home/httpd/perl/tmp/".      $diropendb= "/home/httpd/perl/tmp/".
         "$ENV{'user.domain'}_$ENV{'user.name'}_searchcat.db";          "$env{'user.domain'}_$env{'user.name'}_searchcat.db";
     #      #
     # set the name of the persistent database      # set the name of the persistent database
     #          $ENV{'form.persistent_db_id'} can only have digits in it.      #          $env{'form.persistent_db_id'} can only have digits in it.
     if (! exists($ENV{'form.persistent_db_id'}) ||      if (! exists($env{'form.persistent_db_id'}) ||
         ($ENV{'form.persistent_db_id'} =~ /\D/) ||          ($env{'form.persistent_db_id'} =~ /\D/) ||
         ($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);      $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';
     ##      ##
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     if (exists($ENV{'request.course.id'}) && $ENV{'request.course.id'} ne '') {      if (exists($env{'request.course.id'}) && $env{'request.course.id'} ne '') {
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
              ({href=>'/adm/searchcat?'.               ({href=>'/adm/searchcat?'.
                    'catalogmode='.$ENV{'form.catalogmode'}.                     'catalogmode='.$env{'form.catalogmode'}.
                    '&launch='.$ENV{'form.launch'}.                     '&launch='.$env{'form.launch'}.
                    '&mode='.$ENV{'form.mode'},                     '&mode='.$env{'form.mode'},
               text=>"Course and Catalog Search",                text=>"Course and Catalog Search",
               target=>'_top',                target=>'_top',
               bug=>'Searching',});                bug=>'Searching',});
     } else {      } else {
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
              ({href=>'/adm/searchcat?'.               ({href=>'/adm/searchcat?'.
                    'catalogmode='.$ENV{'form.catalogmode'}.                     'catalogmode='.$env{'form.catalogmode'}.
                    '&launch='.$ENV{'form.launch'}.                     '&launch='.$env{'form.launch'}.
                    '&mode='.$ENV{'form.mode'},                     '&mode='.$env{'form.mode'},
               text=>"Catalog Search",                text=>"Catalog Search",
               target=>'_top',                target=>'_top',
               bug=>'Searching',});                bug=>'Searching',});
     }      }
     #      #
     if ($ENV{'form.phase'} !~ m/(basic|adv|course)_search/) {      if ($env{'form.phase'} !~ m/(basic|adv|course)_search/) {
         if (! &get_persistent_form_data($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:'.                  &Apache::lonnet::logthis('lonsearchcat:'.
                                          'Unable to recover data from '.                                           'Unable to recover data from '.
                                          $persistent_db_file);                                           $persistent_db_file);
Line 216  END Line 216  END
     ## Clear out old values from groupsearch database      ## Clear out old values from groupsearch database
     ##      ##
     untie %groupsearch_db if (tied(%groupsearch_db));      untie %groupsearch_db if (tied(%groupsearch_db));
     if (($ENV{'form.cleargroupsort'} eq '1') ||       if (($env{'form.cleargroupsort'} eq '1') || 
         (($ENV{'form.launch'} eq '1') &&           (($env{'form.launch'} eq '1') && 
          ($ENV{'form.catalogmode'} eq 'groupsearch'))) {           ($env{'form.catalogmode'} eq 'groupsearch'))) {
  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;
             delete($ENV{'form.cleargroupsort'});              delete($env{'form.cleargroupsort'});
  } else {   } else {
             # This is a stupid error to give to the user.                # This is a stupid error to give to the user.  
             # It really tells them nothing.              # It really tells them nothing.
Line 236  END Line 236  END
     ## Configure hidden fields      ## Configure hidden fields
     ##      ##
     $hidden_fields = '<input type="hidden" name="persistent_db_id" value="'.      $hidden_fields = '<input type="hidden" name="persistent_db_id" value="'.
         $ENV{'form.persistent_db_id'}.'" />'."\n";          $env{'form.persistent_db_id'}.'" />'."\n";
     if (exists($ENV{'form.catalogmode'})) {      if (exists($env{'form.catalogmode'})) {
         $hidden_fields .= &hidden_field('catalogmode');          $hidden_fields .= &hidden_field('catalogmode');
     }      }
     if (exists($ENV{'form.form'})) {      if (exists($env{'form.form'})) {
         $hidden_fields .= &hidden_field('form');          $hidden_fields .= &hidden_field('form');
     }      }
     if (exists($ENV{'form.element'})) {      if (exists($env{'form.element'})) {
         $hidden_fields .= &hidden_field('element');          $hidden_fields .= &hidden_field('element');
     }      }
     if (exists($ENV{'form.titleelement'})) {      if (exists($env{'form.titleelement'})) {
         $hidden_fields .= &hidden_field('titleelement');          $hidden_fields .= &hidden_field('titleelement');
     }      }
     if (exists($ENV{'form.mode'})) {      if (exists($env{'form.mode'})) {
         $hidden_fields .= &hidden_field('mode');          $hidden_fields .= &hidden_field('mode');
     }      }
     ##      ##
     ## Configure dynamic components of interface      ## Configure dynamic components of interface
     ##      ##
     if ($ENV{'form.catalogmode'} eq 'interactive') {      if ($env{'form.catalogmode'} eq 'interactive') {
         $closebutton="<input type='button' name='close' value='CLOSE' ";          $closebutton="<input type='button' name='close' value='CLOSE' ";
         if ($ENV{'form.phase'} =~ /(results|run_search)/) {          if ($env{'form.phase'} =~ /(results|run_search)/) {
     $closebutton .="onClick='parent.close()'";      $closebutton .="onClick='parent.close()'";
         } else {          } else {
             $closebutton .="onClick='self.close()'";              $closebutton .="onClick='self.close()'";
         }          }
         $closebutton .=">\n";          $closebutton .=">\n";
     } elsif ($ENV{'form.catalogmode'} eq 'groupsearch') {      } elsif ($env{'form.catalogmode'} eq 'groupsearch') {
         $closebutton="<input type='button' name='close' value='CLOSE' ";          $closebutton="<input type='button' name='close' value='CLOSE' ";
         if ($ENV{'form.phase'} =~ /(results|run_search)/) {          if ($env{'form.phase'} =~ /(results|run_search)/) {
     $closebutton .="onClick='parent.close()'";      $closebutton .="onClick='parent.close()'";
         } else {          } else {
             $closebutton .="onClick='self.close()'";              $closebutton .="onClick='self.close()'";
Line 282  END Line 282  END
     ##      ##
     ## Sanity checks on form elements      ## Sanity checks on form elements
     ##      ##
     if (!defined($ENV{'form.viewselect'})) {      if (!defined($env{'form.viewselect'})) {
         if (($ENV{'form.catalogmode'} eq 'groupsearch') ||          if (($env{'form.catalogmode'} eq 'groupsearch') ||
             ($ENV{'form.catalogmode'} eq 'interactive')) {              ($env{'form.catalogmode'} eq 'interactive')) {
             $ENV{'form.viewselect'} ="Compact View";              $env{'form.viewselect'} ="Compact View";
         } else {          } else {
             $ENV{'form.viewselect'} ="Detailed Citation View";              $env{'form.viewselect'} ="Detailed Citation View";
         }          }
     }      }
     $ENV{'form.phase'} = 'disp_basic' if (! exists($ENV{'form.phase'}));      $env{'form.phase'} = 'disp_basic' if (! exists($env{'form.phase'}));
     $ENV{'form.show'} = 20 if (! exists($ENV{'form.show'}));      $env{'form.show'} = 20 if (! exists($env{'form.show'}));
     #      #
     $ENV{'form.searchmode'} = 'basic' if (! exists($ENV{'form.searchmode'}));      $env{'form.searchmode'} = 'basic' if (! exists($env{'form.searchmode'}));
     if ($ENV{'form.phase'} eq 'adv_search' ||      if ($env{'form.phase'} eq 'adv_search' ||
         $ENV{'form.phase'} eq 'disp_adv') {          $env{'form.phase'} eq 'disp_adv') {
         $ENV{'form.searchmode'} = 'advanced';          $env{'form.searchmode'} = 'advanced';
     } elsif ($ENV{'form.phase'} eq 'course_search') {      } elsif ($env{'form.phase'} eq 'course_search') {
         $ENV{'form.searchmode'} = 'course_search';          $env{'form.searchmode'} = 'course_search';
     }      }
     #      #
     if ($ENV{'form.searchmode'} eq 'advanced') {      if ($env{'form.searchmode'} eq 'advanced') {
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>'/adm/searchcat?phase=disp_adv&'.              ({href=>'/adm/searchcat?phase=disp_adv&'.
                   'catalogmode='.$ENV{'form.catalogmode'}.                    'catalogmode='.$env{'form.catalogmode'}.
                   '&launch='.$ENV{'form.launch'}.                    '&launch='.$env{'form.launch'}.
                   '&mode='.$ENV{'form.mode'},                    '&mode='.$env{'form.mode'},
                   text=>"Advanced Search",                    text=>"Advanced Search",
                   bug=>'Searching',});                    bug=>'Searching',});
     } elsif ($ENV{'form.searchmode'} eq 'course search') {      } elsif ($env{'form.searchmode'} eq 'course search') {
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>'/adm/searchcat?phase=disp_adv&'.              ({href=>'/adm/searchcat?phase=disp_adv&'.
                   'catalogmode='.$ENV{'form.catalogmode'}.                    'catalogmode='.$env{'form.catalogmode'}.
                   '&launch='.$ENV{'form.launch'}.                    '&launch='.$env{'form.launch'}.
                   '&mode='.$ENV{'form.mode'},                    '&mode='.$env{'form.mode'},
                   text=>"Course Search",                    text=>"Course Search",
                   bug=>'Searching',});                    bug=>'Searching',});
     }      }
     ##      ##
     ## Switch on the phase      ## Switch on the phase
     ##      ##
     if ($ENV{'form.phase'} eq 'disp_basic') {      if ($env{'form.phase'} eq 'disp_basic') {
         &print_basic_search_form($r,$closebutton,$hidden_fields);          &print_basic_search_form($r,$closebutton,$hidden_fields);
     } elsif ($ENV{'form.phase'} eq 'disp_adv') {      } elsif ($env{'form.phase'} eq 'disp_adv') {
         &print_advanced_search_form($r,$closebutton,$hidden_fields);          &print_advanced_search_form($r,$closebutton,$hidden_fields);
     } elsif ($ENV{'form.phase'} eq 'results') {      } elsif ($env{'form.phase'} eq 'results') {
         &display_results($r,$importbutton,$closebutton,$diropendb);          &display_results($r,$importbutton,$closebutton,$diropendb);
     } elsif ($ENV{'form.phase'} =~ /^(sort|run_search)$/) {      } elsif ($env{'form.phase'} =~ /^(sort|run_search)$/) {
         my ($query,$customquery,$customshow,$libraries,$pretty_string) =          my ($query,$customquery,$customshow,$libraries,$pretty_string) =
             &get_persistent_data($persistent_db_file,              &get_persistent_data($persistent_db_file,
                  ['query','customquery','customshow',                   ['query','customquery','customshow',
                   'libraries','pretty_string']);                    'libraries','pretty_string']);
         if ($ENV{'form.phase'} eq 'sort') {          if ($env{'form.phase'} eq 'sort') {
             &print_sort_form($r,$pretty_string);              &print_sort_form($r,$pretty_string);
         } elsif ($ENV{'form.phase'} eq 'run_search') {          } elsif ($env{'form.phase'} eq 'run_search') {
             &run_search($r,$query,$customquery,$customshow,              &run_search($r,$query,$customquery,$customshow,
                         $libraries,$pretty_string);                          $libraries,$pretty_string);
         }          }
     } elsif ($ENV{'form.phase'} eq 'course_search') {      } elsif ($env{'form.phase'} eq 'course_search') {
         &course_search($r);          &course_search($r);
     } elsif(($ENV{'form.phase'} eq 'basic_search') ||      } elsif(($env{'form.phase'} eq 'basic_search') ||
             ($ENV{'form.phase'} eq 'adv_search')) {              ($env{'form.phase'} eq 'adv_search')) {
         #          #
         # We are running a search, try to parse it          # We are running a search, try to parse it
         my ($query,$customquery,$customshow,$libraries) =           my ($query,$customquery,$customshow,$libraries) = 
             (undef,undef,undef,undef);              (undef,undef,undef,undef);
         my $pretty_string;          my $pretty_string;
         if ($ENV{'form.phase'} eq 'basic_search') {          if ($env{'form.phase'} eq 'basic_search') {
             ($query,$pretty_string,$libraries) =               ($query,$pretty_string,$libraries) = 
                 &parse_basic_search($r,$closebutton,$hidden_fields);                  &parse_basic_search($r,$closebutton,$hidden_fields);
             return OK if (! defined($query));              return OK if (! defined($query));
             &make_persistent({ basicexp => $ENV{'form.basicexp'}},              &make_persistent({ basicexp => $env{'form.basicexp'}},
                              $persistent_db_file);                               $persistent_db_file);
         } else {                      # Advanced search          } else {                      # Advanced search
             ($query,$customquery,$customshow,$libraries,$pretty_string)               ($query,$customquery,$customshow,$libraries,$pretty_string) 
Line 384  The search has been aborted. Line 384  The search has been aborted.
 END  END
             return OK;              return OK;
         }          }
         delete($ENV{'form.launch'});          delete($env{'form.launch'});
         if (! &make_form_data_persistent($r,$persistent_db_file)) {          if (! &make_form_data_persistent($r,$persistent_db_file)) {
     my $html=&Apache::lonxml::xmlbegin();      my $html=&Apache::lonxml::xmlbegin();
     $r->print(<<END);      $r->print(<<END);
Line 415  END Line 415  END
 # This routine sets non existant checkbox form elements to ''.  # This routine sets non existant checkbox form elements to ''.
 #  #
 sub clean_up_environment {  sub clean_up_environment {
     if ($ENV{'form.phase'} eq 'basic_search') {      if ($env{'form.phase'} eq 'basic_search') {
         if (! exists($ENV{'form.related'})) {          if (! exists($env{'form.related'})) {
             $ENV{'form.related'} = '';              $env{'form.related'} = '';
         }          }
         if (! exists($ENV{'form.domains'})) {          if (! exists($env{'form.domains'})) {
             $ENV{'form.domains'} = '';              $env{'form.domains'} = '';
         }          }
     } elsif ($ENV{'form.phase'} eq 'adv_search') {      } elsif ($env{'form.phase'} eq 'adv_search') {
         foreach my $field ('title','keywords','notes',          foreach my $field ('title','keywords','notes',
                            'abstract','standards','mime') {                             'abstract','standards','mime') {
             if (! exists($ENV{'form.'.$field.'_related'})) {              if (! exists($env{'form.'.$field.'_related'})) {
                 $ENV{'form.'.$field.'_related'} = '';                  $env{'form.'.$field.'_related'} = '';
             }              }
         }          }
     } elsif ($ENV{'form.phase'} eq 'course_search') {      } elsif ($env{'form.phase'} eq 'course_search') {
         if (! exists($ENV{'form.crsrelated'})) {          if (! exists($env{'form.crsrelated'})) {
             $ENV{'form.crsrelated'} = '';              $env{'form.crsrelated'} = '';
         }          }
     }      }
 }  }
Line 439  sub clean_up_environment { Line 439  sub clean_up_environment {
 sub hidden_field {  sub hidden_field {
     my ($name,$value) = @_;      my ($name,$value) = @_;
     if (! defined($value)) {      if (! defined($value)) {
         $value = $ENV{'form.'.$name};          $value = $env{'form.'.$name};
     }      }
     return '<input type="hidden" name="'.$name.'" value="'.$value.'" />'.$/;      return '<input type="hidden" name="'.$name.'" value="'.$value.'" />'.$/;
 }  }
Line 470  sub make_symb { Line 470  sub make_symb {
 sub course_search {  sub course_search {
     my $r=shift;      my $r=shift;
     my $bodytag=&Apache::loncommon::bodytag('Course Search');      my $bodytag=&Apache::loncommon::bodytag('Course Search');
     my $pretty_search_string = '<b>'.$ENV{'form.courseexp'}.'</b>';      my $pretty_search_string = '<b>'.$env{'form.courseexp'}.'</b>';
     my $search_string = $ENV{'form.courseexp'};      my $search_string = $env{'form.courseexp'};
     my @New_Words;      my @New_Words;
     undef(%alreadyseen);      undef(%alreadyseen);
     if ($ENV{'form.crsrelated'}) {      if ($env{'form.crsrelated'}) {
         ($search_string,@New_Words) = &related_version($ENV{'form.courseexp'});          ($search_string,@New_Words) = &related_version($env{'form.courseexp'});
         if (@New_Words) {          if (@New_Words) {
             $pretty_search_string .= ' '.&mt("with related words").": <b>@New_Words</b>.";              $pretty_search_string .= ' '.&mt("with related words").": <b>@New_Words</b>.";
         } else {          } else {
             $pretty_search_string .= ' '.&mt('with no related words').".";              $pretty_search_string .= ' '.&mt('with no related words').".";
         }          }
     }      }
     my $fulltext=$ENV{'form.crsfulltext'};      my $fulltext=$env{'form.crsfulltext'};
     my $discuss=$ENV{'form.crsdiscuss'};      my $discuss=$env{'form.crsdiscuss'};
     my @allwords=($search_string,@New_Words);      my @allwords=($search_string,@New_Words);
     $totalfound=0;      $totalfound=0;
     my $html=&Apache::lonxml::xmlbegin();      my $html=&Apache::lonxml::xmlbegin();
Line 492  sub course_search { Line 492  sub course_search {
     $r->rflush();      $r->rflush();
 # ======================================================= Go through the course  # ======================================================= Go through the course
     my $c=$r->connection;      my $c=$r->connection;
     if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db",      if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.".db",
             &GDBM_READER(),0640)) {              &GDBM_READER(),0640)) {
         foreach (sort(keys(%hash))) {          foreach (sort(keys(%hash))) {
             if ($c->aborted()) { last; }              if ($c->aborted()) { last; }
             if (($_=~/^src\_(.+)$/)) {              if (($_=~/^src\_(.+)$/)) {
  if ($hash{'randomout_'.$1} & !$ENV{'request.role.adv'}) {   if ($hash{'randomout_'.$1} & !$env{'request.role.adv'}) {
     next;       next; 
  }   }
  my $symb=&make_symb($1);   my $symb=&make_symb($1);
Line 518  sub course_search { Line 518  sub course_search {
         my $navmap = Apache::lonnavmaps::navmap->new();          my $navmap = Apache::lonnavmaps::navmap->new();
         my @allres=$navmap->retrieveResources();          my @allres=$navmap->retrieveResources();
         my %discussiontime = &Apache::lonnet::dump('discussiontimes',          my %discussiontime = &Apache::lonnet::dump('discussiontimes',
                                $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},                                 $env{'course.'.$env{'request.course.id'}.'.domain'},
                                $ENV{'course.'.$ENV{'request.course.id'}.'.num'});                                 $env{'course.'.$env{'request.course.id'}.'.num'});
         foreach my $resource (@allres) {          foreach my $resource (@allres) {
             my $result = '';              my $result = '';
             my $applies = 0;              my $applies = 0;
Line 532  sub course_search { Line 532  sub course_search {
                 }                  }
             }              }
             if (defined($discussiontime{$ressymb})) {               if (defined($discussiontime{$ressymb})) { 
                 my %contrib = &Apache::lonnet::restore($ressymb,$ENV{'request.course.id'},                  my %contrib = &Apache::lonnet::restore($ressymb,$env{'request.course.id'},
                      $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},                       $env{'course.'.$env{'request.course.id'}.'.domain'},
                      $ENV{'course.'.$ENV{'request.course.id'}.'.num'});                       $env{'course.'.$env{'request.course.id'}.'.num'});
                 if ($contrib{'version'}) {                  if ($contrib{'version'}) {
                     for (my $id=1;$id<=$contrib{'version'};$id++) {                      for (my $id=1;$id<=$contrib{'version'};$id++) {
                         unless (($contrib{'hidden'}=~/\.$id\./) || ($contrib{'deleted'}=~/\.$id\./)) {                           unless (($contrib{'hidden'}=~/\.$id\./) || ($contrib{'deleted'}=~/\.$id\./)) { 
Line 598  sub checkonthis { Line 598  sub checkonthis {
     $r->rflush();      $r->rflush();
           
     my $result=$title.' ';      my $result=$title.' ';
     if ($ENV{'request.role.adv'} || !$hash{'encrypted_'.$id}) {      if ($env{'request.role.adv'} || !$hash{'encrypted_'.$id}) {
  $result.=&Apache::lonnet::metadata($url,'title').' '.   $result.=&Apache::lonnet::metadata($url,'title').' '.
     &Apache::lonnet::metadata($url,'subject').' '.      &Apache::lonnet::metadata($url,'subject').' '.
     &Apache::lonnet::metadata($url,'abstract').' '.      &Apache::lonnet::metadata($url,'abstract').' '.
Line 619  sub checkonthis { Line 619  sub checkonthis {
            $r->print('&nbsp;');             $r->print('&nbsp;');
        }         }
        my $href=$url;         my $href=$url;
        if ($hash{'encrypted_'.$id} && !$ENV{'request.role.adv'}) {         if ($hash{'encrypted_'.$id} && !$env{'request.role.adv'}) {
    $href=&Apache::lonenc::encrypted($href)     $href=&Apache::lonenc::encrypted($href)
        .'?symb='.&Apache::lonenc::encrypted($symb);         .'?symb='.&Apache::lonenc::encrypted($symb);
        } else {         } else {
Line 688  Prints the form for the basic search.  S Line 688  Prints the form for the basic search.  S
 ######################################################################  ######################################################################
 sub print_basic_search_form {  sub print_basic_search_form {
     my ($r,$closebutton,$hidden_fields) = @_;      my ($r,$closebutton,$hidden_fields) = @_;
     my $result = ($ENV{'form.catalogmode'} ne 'groupsearch');      my $result = ($env{'form.catalogmode'} ne 'groupsearch');
     my $bodytag=&Apache::loncommon::bodytag('Search').      my $bodytag=&Apache::loncommon::bodytag('Search').
         &Apache::lonhtmlcommon::breadcrumbs(undef,'Searching','Search_Basic',          &Apache::lonhtmlcommon::breadcrumbs(undef,'Searching','Search_Basic',
                                    undef,undef,                                     undef,undef,
                                    $ENV{'form.catalogmode'} ne 'groupsearch');                                     $env{'form.catalogmode'} ne 'groupsearch');
     my $scrout = &search_html_header().$bodytag;      my $scrout = &search_html_header().$bodytag;
     if (&Apache::lonnet::allowed('bre',$ENV{'request.role.domain'})) {      if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) {
         # Define interface components          # Define interface components
         my $userelatedwords= '<label>'.          my $userelatedwords= '<label>'.
             &mt('[_1] use related words',              &mt('[_1] use related words',
                 &Apache::lonhtmlcommon::checkbox                  &Apache::lonhtmlcommon::checkbox
                 ('related',$ENV{'form.related'},'related')).'</label>';                  ('related',$env{'form.related'},'related')).'</label>';
         my $onlysearchdomain='<label>'.          my $onlysearchdomain='<label>'.
             &mt('[_1] only search domain [_2]',              &mt('[_1] only search domain [_2]',
                 &Apache::lonhtmlcommon::checkbox('domains',                  &Apache::lonhtmlcommon::checkbox('domains',
                                                  $ENV{'form.domains'},                                                   $env{'form.domains'},
                                                  $r->dir_config('lonDefDomain')                                                   $r->dir_config('lonDefDomain')
                                                  ),                                                   ),
                 $r->dir_config('lonDefDomain')                  $r->dir_config('lonDefDomain')
Line 711  sub print_basic_search_form { Line 711  sub print_basic_search_form {
         my $adv_search_link =           my $adv_search_link = 
             '<a href="/adm/searchcat?'.              '<a href="/adm/searchcat?'.
             'phase=disp_adv&'.              'phase=disp_adv&'.
             'catalogmode='.$ENV{'form.catalogmode'}.              'catalogmode='.$env{'form.catalogmode'}.
             '&launch='.$ENV{'form.launch'}.              '&launch='.$env{'form.launch'}.
             '&mode='.$ENV{'form.mode'}.              '&mode='.$env{'form.mode'}.
             '">'.&mt('Advanced Search').'</a>';              '">'.&mt('Advanced Search').'</a>';
         #          #
         $scrout.='<form name="loncapa_search" method="post" '.          $scrout.='<form name="loncapa_search" method="post" '.
Line 722  sub print_basic_search_form { Line 722  sub print_basic_search_form {
             $hidden_fields;              $hidden_fields;
         #          #
         $scrout .= '<center>'.$/;          $scrout .= '<center>'.$/;
         if ($ENV{'request.course.id'}) {          if ($env{'request.course.id'}) {
             $scrout .= '<h1>'.&mt('LON-CAPA Catalog Search').'</h1>';              $scrout .= '<h1>'.&mt('LON-CAPA Catalog Search').'</h1>';
         } else {          } else {
             # No need to tell them they are searching              # No need to tell them they are searching
Line 732  sub print_basic_search_form { Line 732  sub print_basic_search_form {
             '<tr><td align="center" valign="top">'.              '<tr><td align="center" valign="top">'.
             &Apache::lonhtmlcommon::textbox              &Apache::lonhtmlcommon::textbox
             ('basicexp',              ('basicexp',
              &HTML::Entities::encode($ENV{'form.basicexp'},'<>&"'),50               &HTML::Entities::encode($env{'form.basicexp'},'<>&"'),50
              ).               ).
              '<br />'.               '<br />'.
             '<font size="-1">'.&searchhelp().'</font>'.'</td>'.              '<font size="-1">'.&searchhelp().'</font>'.'</td>'.
Line 753  sub print_basic_search_form { Line 753  sub print_basic_search_form {
             '</td></tr>'.$/;              '</td></tr>'.$/;
         $scrout .= '</table>'.$/.'</center>'.'</form>';          $scrout .= '</table>'.$/.'</center>'.'</form>';
     }      }
     if ($ENV{'request.course.id'}) {      if ($env{'request.course.id'}) {
  my %lt=&Apache::lonlocal::texthash('srch' => 'Search',   my %lt=&Apache::lonlocal::texthash('srch' => 'Search',
                                            'header' => 'Course Search',                                             'header' => 'Course Search',
  'note' => 'Enter terms or phrases, then press "Search" below',   'note' => 'Enter terms or phrases, then press "Search" below',
Line 777  $lt{'note'}. Line 777  $lt{'note'}.
 ENDCOURSESEARCH  ENDCOURSESEARCH
         $scrout.='&nbsp;'.          $scrout.='&nbsp;'.
             &Apache::lonhtmlcommon::textbox('courseexp',              &Apache::lonhtmlcommon::textbox('courseexp',
                                   $ENV{'form.courseexp'},40);                                    $env{'form.courseexp'},40);
         my $crscheckbox =           my $crscheckbox = 
             &Apache::lonhtmlcommon::checkbox('crsfulltext',              &Apache::lonhtmlcommon::checkbox('crsfulltext',
                                    $ENV{'form.crsfulltext'});                                     $env{'form.crsfulltext'});
         my $relcheckbox =           my $relcheckbox = 
             &Apache::lonhtmlcommon::checkbox('crsrelated',              &Apache::lonhtmlcommon::checkbox('crsrelated',
    $ENV{'form.crsrelated'});     $env{'form.crsrelated'});
         my $discheckbox =           my $discheckbox = 
             &Apache::lonhtmlcommon::checkbox('crsdiscuss',              &Apache::lonhtmlcommon::checkbox('crsdiscuss',
                                    $ENV{'form.crsrelated'});                                     $env{'form.crsrelated'});
         $scrout.=(<<ENDENDCOURSE);          $scrout.=(<<ENDENDCOURSE);
 </td></tr>  </td></tr>
 <tr><td><label>$relcheckbox $lt{'use'}</label></td><td></td></tr>  <tr><td><label>$relcheckbox $lt{'use'}</label></td><td></td></tr>
Line 825  sub print_advanced_search_form{ Line 825  sub print_advanced_search_form{
         &Apache::lonhtmlcommon::breadcrumbs(undef,'Searching',          &Apache::lonhtmlcommon::breadcrumbs(undef,'Searching',
                                             'Search_Advanced',                                              'Search_Advanced',
                                             undef,undef,                                              undef,undef,
                                   $ENV{'form.catalogmode'} ne 'groupsearch');                                    $env{'form.catalogmode'} ne 'groupsearch');
     my %lt=&Apache::lonlocal::texthash('srch' => 'Search',      my %lt=&Apache::lonlocal::texthash('srch' => 'Search',
        'reset' => 'Reset',         'reset' => 'Reset',
        'help' => 'Help');         'help' => 'Help');
Line 866  ENDHEADER Line 866  ENDHEADER
      'keywords','notes','abstract','standards','mime') {       'keywords','notes','abstract','standards','mime') {
  $scrout.='<tr><td align="right">'.&titlefield($fields{$field}).'</td><td>'.   $scrout.='<tr><td align="right">'.&titlefield($fields{$field}).'</td><td>'.
     &Apache::lonmeta::prettyinput($field,      &Apache::lonmeta::prettyinput($field,
                                           $ENV{'form.'.$field},                                            $env{'form.'.$field},
                                           $field,                                            $field,
                                           'advsearch',                                            'advsearch',
   $related_word_search{$field},    $related_word_search{$field},
                                           '</td><td align="left">',                                            '</td><td align="left">',
                                           $ENV{'form.'.$field.'_related'},                                            $env{'form.'.$field.'_related'},
                                           50);                                            50);
         if ($related_word_search{$field}) {          if ($related_word_search{$field}) {
             $scrout .= 'related words';              $scrout .= 'related words';
Line 885  ENDHEADER Line 885  ENDHEADER
             '<td align="right">'.&titlefield($fields{$field}).'</td>'.              '<td align="right">'.&titlefield($fields{$field}).'</td>'.
             '<td colspan="2">'.              '<td colspan="2">'.
     &Apache::lonmeta::prettyinput($field,      &Apache::lonmeta::prettyinput($field,
                                           $ENV{'form.'.$field},                                            $env{'form.'.$field},
                                           $field,                                            $field,
                                           'advsearch',                                            'advsearch',
   0).    0).
Line 894  ENDHEADER Line 894  ENDHEADER
     $scrout.='<tr><td align="right">'.      $scrout.='<tr><td align="right">'.
  &titlefield(&mt('MIME Type Category')).'</td><td colspan="2">'.    &titlefield(&mt('MIME Type Category')).'</td><td colspan="2">'. 
     &Apache::loncommon::filecategoryselect('category',      &Apache::loncommon::filecategoryselect('category',
    $ENV{'form.category'}).     $env{'form.category'}).
     '</td></tr>'.$/;      '</td></tr>'.$/;
     $scrout.='<tr><td align="right" valign="top">'.      $scrout.='<tr><td align="right" valign="top">'.
  &titlefield(&mt('Domains')).'</td><td colspan="2">'.    &titlefield(&mt('Domains')).'</td><td colspan="2">'. 
     &Apache::loncommon::domain_select('domains',      &Apache::loncommon::domain_select('domains',
    $ENV{'form.domains'},1).     $env{'form.domains'},1).
     '</td></tr>'.$/;      '</td></tr>'.$/;
     #      #
     # Misc metadata      # Misc metadata
     $scrout.='<tr><td align="right" valign="top">'.      $scrout.='<tr><td align="right" valign="top">'.
  &titlefield(&mt('Copyright/Distribution')).'</td><td colspan="2">'.   &titlefield(&mt('Copyright/Distribution')).'</td><td colspan="2">'.
         &Apache::lonmeta::selectbox('copyright',          &Apache::lonmeta::selectbox('copyright',
                                     $ENV{'form.copyright'},                                      $env{'form.copyright'},
                                     \&Apache::loncommon::copyrightdescription,                                      \&Apache::loncommon::copyrightdescription,
                                     ( undef,                                      ( undef,
                                       &Apache::loncommon::copyrightids)                                        &Apache::loncommon::copyrightids)
Line 914  ENDHEADER Line 914  ENDHEADER
     $scrout.='<tr><td align="right" valign="top">'.      $scrout.='<tr><td align="right" valign="top">'.
  &titlefield(&mt('Language')).'</td><td colspan="2">'.   &titlefield(&mt('Language')).'</td><td colspan="2">'.
         &Apache::lonmeta::selectbox('language',          &Apache::lonmeta::selectbox('language',
                                     $ENV{'form.language'},                                      $env{'form.language'},
                                     \&Apache::loncommon::languagedescription,                                      \&Apache::loncommon::languagedescription,
                                     ('any',&Apache::loncommon::languageids)                                      ('any',&Apache::loncommon::languageids)
                                     ).'</td></tr>';                                      ).'</td></tr>';
Line 1096  Outputs: text for box with view options Line 1096  Outputs: text for box with view options
 ######################################################################  ######################################################################
 sub viewoptions {  sub viewoptions {
     my $scrout;      my $scrout;
     if (! defined($ENV{'form.viewselect'})) {       if (! defined($env{'form.viewselect'})) { 
         $ENV{'form.viewselect'}='detailed';           $env{'form.viewselect'}='detailed'; 
     }      }
     $scrout.=&Apache::lonmeta::selectbox('viewselect',      $scrout.=&Apache::lonmeta::selectbox('viewselect',
  $ENV{'form.viewselect'},   $env{'form.viewselect'},
  \&viewoptiontext,   \&viewoptiontext,
  sort(keys(%Views)));   sort(keys(%Views)));
     $scrout.= '&nbsp;&nbsp;';      $scrout.= '&nbsp;&nbsp;';
     my $countselect = &Apache::lonmeta::selectbox('show',      my $countselect = &Apache::lonmeta::selectbox('show',
                                                   $ENV{'form.show'},                                                    $env{'form.show'},
                                                   undef,                                                    undef,
                                                   (10,20,50,100,1000,10000));                                                    (10,20,50,100,1000,10000));
     $scrout .= ('&nbsp;'x2).&mt('[_1] Records per Page',$countselect).      $scrout .= ('&nbsp;'x2).&mt('[_1] Records per Page',$countselect).
Line 1145  Outputs: returns undef on database error Line 1145  Outputs: returns undef on database error
   
 This function is the reverse of &make_persistent() for form data.  This function is the reverse of &make_persistent() for form data.
 Retrieve persistent data from %persistent_db.  Retrieved items will have their  Retrieve persistent data from %persistent_db.  Retrieved items will have their
 values unescaped.  If a form value already exists in $ENV, it will not be  values unescaped.  If a form value already exists in $env, it will not be
 overwritten.  Form values that are array references may have values appended  overwritten.  Form values that are array references may have values appended
 to them.  to them.
   
Line 1167  sub get_persistent_form_data { Line 1167  sub get_persistent_form_data {
         next if ($name !~ /^form./);          next if ($name !~ /^form./);
         # Kludgification begins!          # Kludgification begins!
         if ($name eq 'form.domains' &&           if ($name eq 'form.domains' && 
             $ENV{'form.searchmode'} eq 'basic' &&              $env{'form.searchmode'} eq 'basic' &&
             $ENV{'form.phase'} ne 'disp_basic') {              $env{'form.phase'} ne 'disp_basic') {
             next;              next;
         }          }
         # End kludge (hopefully)          # End kludge (hopefully)
         next if (exists($ENV{$name}));          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 ($arrays_allowed{$name}) {          if ($arrays_allowed{$name}) {
             $ENV{$name} = [@values];              $env{$name} = [@values];
         } else {          } else {
             $ENV{$name} = $values[0] if ($values[0]);              $env{$name} = $values[0] if ($values[0]);
         }          }
     }      }
     untie (%persistent_db);      untie (%persistent_db);
Line 1285  sub make_form_data_persistent { Line 1285  sub make_form_data_persistent {
     my $r = shift;      my $r = shift;
     my $filename = shift;      my $filename = shift;
     my %save;      my %save;
     foreach (keys(%ENV)) {      foreach (keys(%env)) {
         next if (!/^form/ || /submit/);          next if (!/^form/ || /submit/);
         $save{$_} = $ENV{$_};          $save{$_} = $env{$_};
     }      }
     return &make_persistent(\%save,$filename);      return &make_persistent(\%save,$filename);
 }  }
Line 1335  sub parse_advanced_search { Line 1335  sub parse_advanced_search {
    'lastrevisiondatestart_month','lastrevisiondatestart_day',     'lastrevisiondatestart_month','lastrevisiondatestart_day',
    'lastrevisiondatestart_year','lastrevisiondateend_month',     'lastrevisiondatestart_year','lastrevisiondateend_month',
    'lastrevisiondateend_day','lastrevisiondateend_year') {     'lastrevisiondateend_day','lastrevisiondateend_year') {
  $ENV{'form.'.$field}=~s/[^\w\/\s\(\)\=\-\"\']//g;   $env{'form.'.$field}=~s/[^\w\/\s\(\)\=\-\"\']//g;
     }      }
     foreach ('mode','form','element') {      foreach ('mode','form','element') {
  # is this required?  Hmmm.   # is this required?  Hmmm.
  next if (! exists($ENV{'form.'.$_}));   next if (! exists($env{'form.'.$_}));
  $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.      # Preprocess the category form element.
     $ENV{'form.category'} = 'any' if (! defined($ENV{'form.category'}) ||      $env{'form.category'} = 'any' if (! defined($env{'form.category'}) ||
                                       ref($ENV{'form.category'}));                                        ref($env{'form.category'}));
     #      #
     # Check to see if enough information was filled in      # Check to see if enough information was filled in
     foreach my $field (@BasicFields) {      foreach my $field (@BasicFields) {
  if (&filled($ENV{'form.'.$field})) {   if (&filled($env{'form.'.$field})) {
     $fillflag++;      $fillflag++;
  }   }
     }      }
     foreach my $field (@StatsFields,@EvalFields) {      foreach my $field (@StatsFields,@EvalFields) {
         if (&filled($ENV{'form.'.$field.'_max'})) {          if (&filled($env{'form.'.$field.'_max'})) {
             $fillflag++;              $fillflag++;
         }          }
         if (&filled($ENV{'form.'.$field.'_min'})) {          if (&filled($env{'form.'.$field.'_min'})) {
             $fillflag++;              $fillflag++;
         }          }
     }      }
   
     for my $field ('lowestgradelevel','highestgradelevel') {      for my $field ('lowestgradelevel','highestgradelevel') {
         if ( $ENV{'form.'.$field} =~ /^\d+$/ &&          if ( $env{'form.'.$field} =~ /^\d+$/ &&
              $ENV{'form.'.$field} > 0) {               $env{'form.'.$field} > 0) {
             $fillflag++;              $fillflag++;
         }          }
     }      }
Line 1379  sub parse_advanced_search { Line 1379  sub parse_advanced_search {
     my $font = '<font color="#800000" face="helvetica">';      my $font = '<font color="#800000" face="helvetica">';
     # Evaluate logical expression AND/OR/NOT phrase fields.      # Evaluate logical expression AND/OR/NOT phrase fields.
     foreach my $field (@BasicFields) {      foreach my $field (@BasicFields) {
  next if (!defined($ENV{'form.'.$field}) || $ENV{'form.'.$field} eq '');   next if (!defined($env{'form.'.$field}) || $env{'form.'.$field} eq '');
         my ($error,$SQLQuery) =           my ($error,$SQLQuery) = 
             &process_phrase_input($ENV{'form.'.$field},              &process_phrase_input($env{'form.'.$field},
                                   $ENV{'form.'.$field.'_related'},$field);                                    $env{'form.'.$field.'_related'},$field);
         if (defined($error)) {          if (defined($error)) {
             &output_unparsed_phrase_error($r,$closebutton,'phase=disp_adv',              &output_unparsed_phrase_error($r,$closebutton,'phase=disp_adv',
                                          $hidden_fields,$field);                                           $hidden_fields,$field);
             return;              return;
         } else {          } else {
             $pretty_search_string .=               $pretty_search_string .= 
                 $font.$field.'</font>: '.$ENV{'form.'.$field};                  $font.$field.'</font>: '.$env{'form.'.$field};
             if ($ENV{'form.'.$field.'_related'}) {              if ($env{'form.'.$field.'_related'}) {
                 my @Words =                   my @Words = 
                     &Apache::loncommon::get_related_words                      &Apache::loncommon::get_related_words
                     ($ENV{'form.'.$field});                      ($env{'form.'.$field});
                 if (@Words) {                  if (@Words) {
                     $pretty_search_string.= ' with related words: '.                      $pretty_search_string.= ' with related words: '.
                         join(', ',@Words[0..4]);                          join(', ',@Words[0..4]);
Line 1409  sub parse_advanced_search { Line 1409  sub parse_advanced_search {
     # Make the 'mime' from 'form.category' and 'form.extension'      # Make the 'mime' from 'form.category' and 'form.extension'
     #      #
     my $searchphrase;      my $searchphrase;
     if (exists($ENV{'form.category'})    &&       if (exists($env{'form.category'})    && 
         $ENV{'form.category'} !~ /^\s*$/ &&          $env{'form.category'} !~ /^\s*$/ &&
         $ENV{'form.category'} ne 'any')     {          $env{'form.category'} ne 'any')     {
         my @extensions = &Apache::loncommon::filecategorytypes          my @extensions = &Apache::loncommon::filecategorytypes
                                                    ($ENV{'form.category'});                                                     ($env{'form.category'});
         if (scalar(@extensions) > 0) {          if (scalar(@extensions) > 0) {
             $searchphrase = join(' OR ',@extensions);              $searchphrase = join(' OR ',@extensions);
         }          }
Line 1426  sub parse_advanced_search { Line 1426  sub parse_advanced_search {
     }      }
     #      #
     # Evaluate option lists      # Evaluate option lists
     if ($ENV{'form.lowestgradelevel'}        &&      if ($env{'form.lowestgradelevel'}        &&
         $ENV{'form.lowestgradelevel'} ne '0' &&          $env{'form.lowestgradelevel'} ne '0' &&
         $ENV{'form.lowestgradelevel'} =~ /^\d+$/) {          $env{'form.lowestgradelevel'} =~ /^\d+$/) {
  push(@queries,   push(@queries,
              '(lowestgradelevel>='.$ENV{'form.lowestgradelevel'}.')');               '(lowestgradelevel>='.$env{'form.lowestgradelevel'}.')');
         $pretty_search_string.="lowestgradelevel>=".          $pretty_search_string.="lowestgradelevel>=".
             $ENV{'form.lowestgradelevel'}."<br />\n";              $env{'form.lowestgradelevel'}."<br />\n";
     }      }
     if ($ENV{'form.highestgradelevel'}        &&      if ($env{'form.highestgradelevel'}        &&
         $ENV{'form.highestgradelevel'} ne '0' &&          $env{'form.highestgradelevel'} ne '0' &&
         $ENV{'form.highestgradelevel'} =~ /^\d+$/) {          $env{'form.highestgradelevel'} =~ /^\d+$/) {
  push(@queries,   push(@queries,
              '(highestgradelevel<='.$ENV{'form.highestgradelevel'}.')');               '(highestgradelevel<='.$env{'form.highestgradelevel'}.')');
         $pretty_search_string.="highestgradelevel<=".          $pretty_search_string.="highestgradelevel<=".
             $ENV{'form.highestgradelevel'}."<br />\n";              $env{'form.highestgradelevel'}."<br />\n";
     }      }
     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'}\")";
         $pretty_search_string.=$font."language</font>= ".          $pretty_search_string.=$font."language</font>= ".
             &Apache::loncommon::languagedescription($ENV{'form.language'}).              &Apache::loncommon::languagedescription($env{'form.language'}).
                 "<br />\n";                  "<br />\n";
     }      }
     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'}\")";
         $pretty_search_string.=$font."copyright</font> = ".          $pretty_search_string.=$font."copyright</font> = ".
             &Apache::loncommon::copyrightdescription($ENV{'form.copyright'}).              &Apache::loncommon::copyrightdescription($env{'form.copyright'}).
                 "<br />\n";                  "<br />\n";
     }      }
     #      #
     # Statistics      # Statistics
     foreach my $field (@StatsFields,@EvalFields) {      foreach my $field (@StatsFields,@EvalFields) {
         my ($min,$max);          my ($min,$max);
         if (exists($ENV{'form.'.$field.'_min'}) &&           if (exists($env{'form.'.$field.'_min'}) && 
             $ENV{'form.'.$field.'_min'} ne '') {              $env{'form.'.$field.'_min'} ne '') {
             $min = $ENV{'form.'.$field.'_min'};              $min = $env{'form.'.$field.'_min'};
         }          }
         if (exists($ENV{'form.'.$field.'_max'}) &&          if (exists($env{'form.'.$field.'_max'}) &&
             $ENV{'form.'.$field.'_max'} ne '') {              $env{'form.'.$field.'_max'} ne '') {
             $max = $ENV{'form.'.$field.'_max'};              $max = $env{'form.'.$field.'_max'};
         }          }
         next if (! defined($max) && ! defined($min));          next if (! defined($max) && ! defined($min));
         if (defined($min) && defined($max)) {          if (defined($min) && defined($max)) {
Line 1517  sub parse_advanced_search { Line 1517  sub parse_advanced_search {
     ## because I was unable to figureout exactly how it worked and could      ## because I was unable to figureout exactly how it worked and could
     ## not imagine people actually using it.  MH      ## not imagine people actually using it.  MH
     ##      ##
     # 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);
Line 1552  sub parse_advanced_search { Line 1552  sub parse_advanced_search {
   
 sub parse_domain_restrictions {  sub parse_domain_restrictions {
     my $libraries_to_query = undef;      my $libraries_to_query = undef;
     # $ENV{'form.domains'} can be either a scalar or an array reference.      # $env{'form.domains'} can be either a scalar or an array reference.
     # We need an array.      # We need an array.
     if (! exists($ENV{'form.domains'}) || $ENV{'form.domains'} eq '') {      if (! exists($env{'form.domains'}) || $env{'form.domains'} eq '') {
         return (undef,'',undef);          return (undef,'',undef);
     }      }
     my @allowed_domains;      my @allowed_domains;
     if (ref($ENV{'form.domains'})) {      if (ref($env{'form.domains'})) {
         @allowed_domains =  @{$ENV{'form.domains'}};          @allowed_domains =  @{$env{'form.domains'}};
     } else {      } else {
         @allowed_domains = ($ENV{'form.domains'});          @allowed_domains = ($env{'form.domains'});
     }      }
     #      #
     my %domain_hash = ();      my %domain_hash = ();
Line 1613  sub parse_basic_search { Line 1613  sub parse_basic_search {
     #      #
     # 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;
     }      }
     foreach ('mode','form','element') {      foreach ('mode','form','element') {
  # is this required?  Hmmm.   # is this required?  Hmmm.
  next unless (exists($ENV{"form.$_"}));   next unless (exists($env{"form.$_"}));
  $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;
     }      }
     my ($libraries_to_query,$pretty_domains_string,$domain_sql_restriction) =       my ($libraries_to_query,$pretty_domains_string,$domain_sql_restriction) = 
         &parse_domain_restrictions();          &parse_domain_restrictions();
     #      #
     # Check to see if enough of a query is filled in      # Check to see if enough of a query is filled in
     my $search_string = $ENV{'form.basicexp'};      my $search_string = $env{'form.basicexp'};
     if (! &filled($search_string)) {      if (! &filled($search_string)) {
  &output_blank_field_error($r,$closebutton,'phase=disp_basic');   &output_blank_field_error($r,$closebutton,'phase=disp_basic');
  return OK;   return OK;
Line 1637  sub parse_basic_search { Line 1637  sub parse_basic_search {
                                              'notes','abstract','keywords')                                               'notes','abstract','keywords')
                                             ).')';                                              ).')';
     my ($error,$SQLQuery) = &process_phrase_input($search_string,      my ($error,$SQLQuery) = &process_phrase_input($search_string,
                                                     $ENV{'form.related'},                                                      $env{'form.related'},
                                                     $searchfield);                                                      $searchfield);
     if ($error) {      if ($error) {
         &output_unparsed_phrase_error($r,$closebutton,'phase=disp_basic',          &output_unparsed_phrase_error($r,$closebutton,'phase=disp_basic',
Line 2012  sub copyright_check { Line 2012  sub copyright_check {
                                               $Metadata->{'url'});                                                $Metadata->{'url'});
     # Check for priv      # Check for priv
     if (($Metadata->{'copyright'} eq 'priv') &&       if (($Metadata->{'copyright'} eq 'priv') && 
         (($ENV{'user.name'} ne $resname) &&          (($env{'user.name'} ne $resname) &&
          ($ENV{'user.domain'} ne $resdom))) {           ($env{'user.domain'} ne $resdom))) {
         return 0;          return 0;
     }      }
     # Check for domain      # Check for domain
     if (($Metadata->{'copyright'} eq 'domain') &&      if (($Metadata->{'copyright'} eq 'domain') &&
         ($ENV{'user.domain'} ne $resdom)) {          ($env{'user.domain'} ne $resdom)) {
         return 0;          return 0;
     }      }
     return 1;      return 1;
Line 2099  sub print_sort_form { Line 2099  sub print_sort_form {
     my $bodytag=&Apache::loncommon::bodytag(undef,undef,undef,1).      my $bodytag=&Apache::loncommon::bodytag(undef,undef,undef,1).
         &Apache::lonhtmlcommon::breadcrumbs          &Apache::lonhtmlcommon::breadcrumbs
         (undef,'Searching','Searching',undef,undef,          (undef,'Searching','Searching',undef,undef,
          $ENV{'form.catalogmode'} ne 'groupsearch');           $env{'form.catalogmode'} ne 'groupsearch');
   
     ##      ##
     my %SortableFields=&Apache::lonlocal::texthash(       my %SortableFields=&Apache::lonlocal::texthash( 
Line 2118  sub print_sort_form { Line 2118  sub print_sort_form {
          lastrevisiondate => 'Revision Date'           lastrevisiondate => 'Revision Date'
      );       );
     ##      ##
     my $table = $ENV{'form.table'};      my $table = $env{'form.table'};
     return if (! &ensure_db_and_table($r,$table));      return if (! &ensure_db_and_table($r,$table));
     ##      ##
     ## Get the number of results       ## Get the number of results 
Line 2139  $html Line 2139  $html
 <script>  <script>
     function change_sort() {      function change_sort() {
         var newloc = "/adm/searchcat?phase=results";          var newloc = "/adm/searchcat?phase=results";
         newloc += "&persistent_db_id=$ENV{'form.persistent_db_id'}";          newloc += "&persistent_db_id=$env{'form.persistent_db_id'}";
         newloc += "&sortby=";          newloc += "&sortby=";
         newloc += document.forms.statusform.elements.sortby.value;          newloc += document.forms.statusform.elements.sortby.value;
         parent.resultsframe.location= newloc;          parent.resultsframe.location= newloc;
Line 2154  END Line 2154  END
   
 #<h2>Sort Results</h2>  #<h2>Sort Results</h2>
 #Sort by: <select size="1" name="sortby" onchange="javascript:change_sort();">  #Sort by: <select size="1" name="sortby" onchange="javascript:change_sort();">
 #    $ENV{'form.sortby'} = 'id' if (! defined($ENV{'form.sortby'}));  #    $env{'form.sortby'} = 'id' if (! defined($env{'form.sortby'}));
 #    foreach (keys(%SortableFields)) {  #    foreach (keys(%SortableFields)) {
 #        $result.="<option name=\"$_\"";  #        $result.="<option name=\"$_\"";
 #        if ($_ eq $ENV{'form.sortby'}) {  #        if ($_ eq $env{'form.sortby'}) {
 #            $result.=" selected ";  #            $result.=" selected ";
 #        }  #        }
 #        $result.=" >$SortableFields{$_}</option>\n";  #        $result.=" >$SortableFields{$_}</option>\n";
Line 2208  my @Fullindicies; Line 2208  my @Fullindicies;
 =item &create_results_table()  =item &create_results_table()
   
 Creates the table of search results by calling lonmysql.  Stores the  Creates the table of search results by calling lonmysql.  Stores the
 table id in $ENV{'form.table'}  table id in $env{'form.table'}
   
 Inputs: none.  Inputs: none.
   
Line 2239  sub create_results_table { Line 2239  sub create_results_table {
             FULLTEXT => [{'columns' => \@Fullindicies},],              FULLTEXT => [{'columns' => \@Fullindicies},],
         } );          } );
     if (defined($table)) {      if (defined($table)) {
         $ENV{'form.table'} = $table;          $env{'form.table'} = $table;
         return $table;          return $table;
     }       } 
     return undef; # Error...      return undef; # Error...
Line 2340  Returns: html string for a 'revise searc Line 2340  Returns: html string for a 'revise searc
 ######################################################################  ######################################################################
 sub revise_button {  sub revise_button {
     my $revise_phase = 'disp_basic';      my $revise_phase = 'disp_basic';
     $revise_phase = 'disp_adv' if ($ENV{'form.searchmode'} eq 'advanced');      $revise_phase = 'disp_adv' if ($env{'form.searchmode'} eq 'advanced');
     my $newloc = '/adm/searchcat'.      my $newloc = '/adm/searchcat'.
         '?persistent_db_id='.$ENV{'form.persistent_db_id'}.          '?persistent_db_id='.$env{'form.persistent_db_id'}.
             '&cleargroupsort=1'.              '&cleargroupsort=1'.
             '&phase='.$revise_phase;              '&phase='.$revise_phase;
     my $result = qq{<input type="button" value="Revise search" name="revise"} .      my $result = qq{<input type="button" value="Revise search" name="revise"} .
Line 2369  sub run_search { Line 2369  sub run_search {
     my $bodytag=&Apache::loncommon::bodytag(undef,undef,undef,1);      my $bodytag=&Apache::loncommon::bodytag(undef,undef,undef,1);
     $bodytag.=&Apache::lonhtmlcommon::breadcrumbs      $bodytag.=&Apache::lonhtmlcommon::breadcrumbs
         (undef,'Searching','Searching',undef,undef,          (undef,'Searching','Searching',undef,undef,
          $ENV{'form.catalogmode'} ne 'groupsearch');           $env{'form.catalogmode'} ne 'groupsearch');
     my $connection = $r->connection;      my $connection = $r->connection;
     #      #
     # Print run_search header      # Print run_search header
Line 2411  END Line 2411  END
     my %Server_status;      my %Server_status;
     #      #
     # Check on the mysql table we will use to store results.      # Check on the mysql table we will use to store results.
     my $table =$ENV{'form.table'};      my $table =$env{'form.table'};
     if (! defined($table) || $table eq '' || $table =~ /\D/ ) {      if (! defined($table) || $table eq '' || $table =~ /\D/ ) {
         $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.</body></html>");                    "The search has been aborted.</body></html>");
Line 2421  END Line 2421  END
     if (! defined($table_status)) {      if (! defined($table_status)) {
         $r->print("Unable to determine status of table.</body></html>");          $r->print("Unable to determine status of table.</body></html>");
         &Apache::lonnet::logthis("Bogus table id of $table for ".          &Apache::lonnet::logthis("Bogus table id of $table for ".
                                  "$ENV{'user.name'} @ $ENV{'user.domain'}");                                   "$env{'user.name'} @ $env{'user.domain'}");
         &Apache::lonnet::logthis("lonmysql error = ".          &Apache::lonnet::logthis("lonmysql error = ".
                                  &Apache::lonmysql::get_error());                                   &Apache::lonmysql::get_error());
         return;          return;
Line 2560  END Line 2560  END
     # results to get, so let the client know the top frame needs to be      # results to get, so let the client know the top frame needs to be
     # loaded from /adm/searchcat      # loaded from /adm/searchcat
     $r->print("</body></html>");      $r->print("</body></html>");
 #    if ($ENV{'form.catalogmode'} ne 'groupsearch') {  #    if ($env{'form.catalogmode'} ne 'groupsearch') {
         $r->print("<script>".          $r->print("<script>".
                       "window.location='/adm/searchcat?".                        "window.location='/adm/searchcat?".
                       "phase=sort&".                        "phase=sort&".
                       "persistent_db_id=$ENV{'form.persistent_db_id'}';".                        "persistent_db_id=$env{'form.persistent_db_id'}';".
                   "</script>");                    "</script>");
 #    }  #    }
     return;      return;
Line 2619  sub display_results { Line 2619  sub display_results {
     ##      ##
     ## Set viewing function      ## Set viewing function
     ##      ##
     my $viewfunction = $Views{$ENV{'form.viewselect'}};      my $viewfunction = $Views{$env{'form.viewselect'}};
     if (!defined($viewfunction)) {      if (!defined($viewfunction)) {
         $r->print("Internal Error - Bad view selected.\n");          $r->print("Internal Error - Bad view selected.\n");
         $r->rflush();          $r->rflush();
Line 2635  sub display_results { Line 2635  sub display_results {
     my $action = "/adm/searchcat?phase=results";      my $action = "/adm/searchcat?phase=results";
     ##      ##
     ## Deal with groupsearch by opening the groupsearch db file.      ## Deal with groupsearch by opening the groupsearch db file.
     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 store import results.</form></body></html>');              $r->print('Unable to store import results.</form></body></html>');
Line 2645  sub display_results { Line 2645  sub display_results {
     }      }
     ##      ##
     ## Prepare the table for querying      ## Prepare the table for querying
     my $table = $ENV{'form.table'};      my $table = $env{'form.table'};
     return if (! &ensure_db_and_table($r,$table));      return if (! &ensure_db_and_table($r,$table));
     ##      ##
     ## Get the number of results       ## Get the number of results 
Line 2659  sub display_results { Line 2659  sub display_results {
     }      }
     ##      ##
     ## Determine how many results we need to get      ## Determine how many results we need to get
     $ENV{'form.start'} = 1  if (! exists($ENV{'form.start'}));      $env{'form.start'} = 1  if (! exists($env{'form.start'}));
     $ENV{'form.show'}  = 20 if (! exists($ENV{'form.show'}));      $env{'form.show'}  = 20 if (! exists($env{'form.show'}));
     if (exists($ENV{'form.prev'})) {      if (exists($env{'form.prev'})) {
         $ENV{'form.start'} -= $ENV{'form.show'};          $env{'form.start'} -= $env{'form.show'};
     } elsif (exists($ENV{'form.next'})) {      } elsif (exists($env{'form.next'})) {
         $ENV{'form.start'} += $ENV{'form.show'};          $env{'form.start'} += $env{'form.show'};
     }      }
     $ENV{'form.start'} = 1 if ($ENV{'form.start'}<1);      $env{'form.start'} = 1 if ($env{'form.start'}<1);
     $ENV{'form.start'} = $total_results if ($ENV{'form.start'}>$total_results);      $env{'form.start'} = $total_results if ($env{'form.start'}>$total_results);
     my $min = $ENV{'form.start'};      my $min = $env{'form.start'};
     my $max;      my $max;
     if ($ENV{'form.show'} eq 'all') {      if ($env{'form.show'} eq 'all') {
         $max = $total_results ;          $max = $total_results ;
     } else {      } else {
         $max = $min + $ENV{'form.show'} - 1;          $max = $min + $env{'form.show'} - 1;
         $max = $total_results if ($max > $total_results);          $max = $total_results if ($max > $total_results);
     }      }
     ##      ##
Line 2685  sub display_results { Line 2685  sub display_results {
               );                );
     #      #
     # Build sorting selector      # Build sorting selector
   <<<<<<< lonsearchcat.pm
       my @field_order =  ('default',
                           'title',
                           'author',
                           'subject',
                           'url',
                           'keywords',
                           'version',
                           'language',
                           'creationdate'=>,
                           'lastrevisiondate',
                           'owner',
                           'copyright',
                           'authorspace',
                           'lowestgradeleve',
                           'highestgradelevel',
                           'standards',
                           'count',
                           'stdno',
                           'avetries',
                           'difficulty',
                           'disc',
                           'clear',
                           'technical',
                           'correct',
                           'helpful',
                           'depth',
                           );                                              
       my %sort_fields = ('default'     => 'Default',
                          'title'       => 'Title',
                          'author'      => 'Author',
                          'subject'     => 'Subject',
                          'url'         => 'URL',
                          'keywords'    => 'Keywords',
                          'version'     => 'Version',
                          'language'    => 'Language',
                          'creationdate'=> 'Creation Date',
                          'lastrevisiondate' => 'Last Revision Date',
                          'owner'       => 'Owner',
                          'copyright'   => 'Copyright',
                          'authorspace' => 'Authorspace',
                          'lowestgradeleve' => 'Lowest Grade Level',
                          'highestgradelevel' => 'Highest Grade Level',
                          'standards'   => 'Standards',
                          'count'       => 'Number of Accesses',
                          'stdno'       => 'Students Attempting',
                          'avetries'    => 'Average Number of Tries',
                          'difficulty'  => 'Mean Degree of Difficulty',
                          'disc'        => 'Mean Degree of Discrimination',
                          'clear'       => 'Evaluation: Clear',
                          'technical'   => 'Evaluation: Technically Correct',
                          'correct'     => 'Evaluation: Material is Correct',
                          'helpful'     => 'Evaluation: Material is Helpful',
                          'depth'       => 'Evaluation: Material has Depth',
                          'select_form_order' => \@field_order,
                          );
   
       my $sortform = &mt('Sort by [_1]',
                          &Apache::loncommon::select_form($env{'form.sortfield'},
   =======
     my @fields =       my @fields = 
         (          (
          {key=>'default' },           {key=>'default' },
Line 2731  sub display_results { Line 2791  sub display_results {
     $ENV{'form.sortorder'} = 'asc' if (! exists($ENV{'form.sortorder'}));      $ENV{'form.sortorder'} = 'asc' if (! exists($ENV{'form.sortorder'}));
     my $sortform = &mt('Sort by [_1] [_2]',      my $sortform = &mt('Sort by [_1] [_2]',
                        &Apache::loncommon::select_form($ENV{'form.sortfield'},                         &Apache::loncommon::select_form($ENV{'form.sortfield'},
   >>>>>>> 1.242
                                                       'sortfield',                                                        'sortfield',
                                                       %sort_fields),                                                        %sort_fields),
                        &Apache::loncommon::select_form($ENV{'form.sortorder'},                         &Apache::loncommon::select_form($ENV{'form.sortorder'},
Line 2745  sub display_results { Line 2806  sub display_results {
         ('<table width="100%"><tr><td width="25%" align="right">'.          ('<table width="100%"><tr><td width="25%" align="right">'.
          '<nobr>'.$sortform.'</nobr>'.           '<nobr>'.$sortform.'</nobr>'.
          '</td><td width="25%" align="right">'.           '</td><td width="25%" align="right">'.
          &prev_next_buttons($min,$ENV{'form.show'},$total_results).           &prev_next_buttons($min,$env{'form.show'},$total_results).
          '</td><td align="right">'.           '</td><td align="right">'.
          &viewoptions().'</td></tr></table>'           &viewoptions().'</td></tr></table>'
          );           );
Line 2763  sub display_results { Line 2824  sub display_results {
     ##      ##
     ## Get results from MySQL table      ## Get results from MySQL table
     my $sort_command  = 'id>='.$min.' AND id<='.$max;      my $sort_command  = 'id>='.$min.' AND id<='.$max;
   <<<<<<< lonsearchcat.pm
       if ($env{'form.sortfield'} ne 'default' && 
           exists($sort_fields{$env{'form.sortfield'}})) {
           $sort_command = $env{'form.sortfield'}.' IS NOT NULL '.
               'ORDER BY '.$env{'form.sortfield'}.
   =======
     my $order;      my $order;
     if (exists($ENV{'form.sortorder'})) {      if (exists($ENV{'form.sortorder'})) {
         if ($ENV{'form.sortorder'} eq 'asc') {          if ($ENV{'form.sortorder'} eq 'asc') {
Line 2779  sub display_results { Line 2846  sub display_results {
         exists($sort_fields{$ENV{'form.sortfield'}})) {          exists($sort_fields{$ENV{'form.sortfield'}})) {
         $sort_command = $ENV{'form.sortfield'}.' IS NOT NULL '.          $sort_command = $ENV{'form.sortfield'}.' IS NOT NULL '.
             'ORDER BY '.$ENV{'form.sortfield'}.' '.$order.              'ORDER BY '.$ENV{'form.sortfield'}.' '.$order.
   >>>>>>> 1.242
             '  LIMIT '.($min-1).','.($max-$min);              '  LIMIT '.($min-1).','.($max-$min);
     }      }
     my @Results = &Apache::lonmysql::get_rows($table,$sort_command);      my @Results = &Apache::lonmysql::get_rows($table,$sort_command);
Line 2807  sub display_results { Line 2875  sub display_results {
     } else {      } else {
         $r->print          $r->print
             ('<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>\n"               ."</center>\n"
              );               );
     }      }
Line 2829  sub display_results { Line 2897  sub display_results {
 =item &catalogmode_output($title,$url,$fnum,$checkbox_num)  =item &catalogmode_output($title,$url,$fnum,$checkbox_num)
   
 Returns html needed for the various catalog modes.  Gets inputs from  Returns html needed for the various catalog modes.  Gets inputs from
 $ENV{'form.catalogmode'}.  Stores data in %groupsearch_db.  $env{'form.catalogmode'}.  Stores data in %groupsearch_db.
   
 =cut  =cut
   
Line 2838  $ENV{'form.catalogmode'}.  Stores data i Line 2906  $ENV{'form.catalogmode'}.  Stores data i
 sub catalogmode_output {  sub catalogmode_output {
     my $output = '';      my $output = '';
     my ($title,$url,$fnum,$checkbox_num) = @_;      my ($title,$url,$fnum,$checkbox_num) = @_;
     if ($ENV{'form.catalogmode'} eq 'interactive') {      if ($env{'form.catalogmode'} eq 'interactive') {
         $title=~ s/\'/\\\'/g;          $title=~ s/\'/\\\'/g;
         if ($ENV{'form.catalogmode'} eq 'interactive') {          if ($env{'form.catalogmode'} eq 'interactive') {
             $output.=<<END               $output.=<<END 
 <font size='-1'><INPUT TYPE="button" NAME="returnvalues" VALUE="SELECT"  <font size='-1'><INPUT TYPE="button" NAME="returnvalues" VALUE="SELECT"
 onClick="javascript:select_data('$title','$url')">  onClick="javascript:select_data('$title','$url')">
 </font>  </font>
 END  END
         }          }
     } elsif ($ENV{'form.catalogmode'} eq 'groupsearch') {      } elsif ($env{'form.catalogmode'} eq 'groupsearch') {
         $groupsearch_db{"pre_${fnum}_link"}=$url;          $groupsearch_db{"pre_${fnum}_link"}=$url;
         $groupsearch_db{"pre_${fnum}_title"}=$title;          $groupsearch_db{"pre_${fnum}_title"}=$title;
         $output.=<<END;          $output.=<<END;
Line 2937  sub handle_custom_fields { Line 3005  sub handle_custom_fields {
     my $customshow='';      my $customshow='';
     my $extrashow='';      my $extrashow='';
     my @customfields;      my @customfields;
     if ($ENV{'form.customshow'}) {      if ($env{'form.customshow'}) {
         $customshow=$ENV{'form.customshow'};          $customshow=$env{'form.customshow'};
         $customshow=~s/[^\w\s]//g;          $customshow=~s/[^\w\s]//g;
         my @fields=map {          my @fields=map {
             "<font color=\"#008000\">$_:</font><!-- $_ -->";              "<font color=\"#008000\">$_:</font><!-- $_ -->";
Line 2972  sub handle_custom_fields { Line 3040  sub handle_custom_fields {
 Output the proper html headers and javascript code to deal with different   Output the proper html headers and javascript code to deal with different 
 calling modes.  calling modes.
   
 Takes most inputs directly from %ENV, except $mode.    Takes most inputs directly from %env, except $mode.  
   
 =over 4  =over 4
   
Line 3017  sub search_results_header { Line 3085  sub search_results_header {
     # output beginning of search page      # output beginning of search page
     # 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
     if ($ENV{'form.catalogmode'} eq 'interactive'){      if ($env{'form.catalogmode'} eq 'interactive'){
  if (! exists($ENV{'form.mode'}) || $ENV{'form.mode'} ne 'edit') {   if (! exists($env{'form.mode'}) || $env{'form.mode'} ne 'edit') {
             $result.=<<SCRIPT;              $result.=<<SCRIPT;
 <script type="text/javascript">  <script type="text/javascript">
     function select_data(title,url) {      function select_data(title,url) {
Line 3038  sub search_results_header { Line 3106  sub search_results_header {
     }      }
 </script>  </script>
 SCRIPT  SCRIPT
         } elsif ($ENV{'form.mode'} eq 'edit') {          } elsif ($env{'form.mode'} eq 'edit') {
             my $form = $ENV{'form.form'};              my $form = $env{'form.form'};
             my $element = $ENV{'form.element'};              my $element = $env{'form.element'};
             my $titleelement = $ENV{'form.titleelement'};              my $titleelement = $env{'form.titleelement'};
     my $changetitle;      my $changetitle;
     if (!$titleelement) {      if (!$titleelement) {
  $changetitle='function changeTitle(val) {}';   $changetitle='function changeTitle(val) {}';
Line 3078  function changeURL(val) { Line 3146  function changeURL(val) {
 SCRIPT  SCRIPT
         }          }
     }      }
     $result.=<<SCRIPT if $ENV{'form.catalogmode'} eq 'groupsearch';      $result.=<<SCRIPT if $env{'form.catalogmode'} eq 'groupsearch';
 <script type="text/javascript">  <script type="text/javascript">
     function queue(checkbox_num,val) {      function queue(checkbox_num,val) {
         if (document.forms.results.returnvalues.length != "undefined" &&          if (document.forms.results.returnvalues.length != "undefined" &&
Line 3098  SCRIPT Line 3166  SCRIPT
     }      }
     function select_group() {      function select_group() {
  parent.window.location=   parent.window.location=
     "/adm/groupsort?mode=$ENV{'form.mode'}&catalogmode=groupsearch&acts="+      "/adm/groupsort?mode=$env{'form.mode'}&catalogmode=groupsearch&acts="+
     parent.statusframe.document.forms.statusform.elements.Queue.value;      parent.statusframe.document.forms.statusform.elements.Queue.value;
     }      }
 </script>  </script>
Line 3129  ENDSTATUS Line 3197  ENDSTATUS
 }  }
   
 sub results_link {  sub results_link {
     my $basic_link   = "/adm/searchcat?"."&table=".$ENV{'form.table'}.      my $basic_link   = "/adm/searchcat?"."&table=".$env{'form.table'}.
         "&persistent_db_id=".$ENV{'form.persistent_db_id'};          "&persistent_db_id=".$env{'form.persistent_db_id'};
     my $results_link = $basic_link."&phase=results".      my $results_link = $basic_link."&phase=results".
         "&pause=1"."&start=1";          "&pause=1"."&start=1";
     return $results_link;      return $results_link;
Line 3140  sub results_link { Line 3208  sub results_link {
 ######################################################################  ######################################################################
 sub print_frames_interface {  sub print_frames_interface {
     my $r = shift;      my $r = shift;
     my $basic_link = "/adm/searchcat?"."&table=".$ENV{'form.table'}.      my $basic_link = "/adm/searchcat?"."&table=".$env{'form.table'}.
         "&persistent_db_id=".$ENV{'form.persistent_db_id'};          "&persistent_db_id=".$env{'form.persistent_db_id'};
     my $run_search_link = $basic_link."&phase=run_search";      my $run_search_link = $basic_link."&phase=run_search";
     my $results_link = &results_link();      my $results_link = &results_link();
     my $html=&Apache::lonxml::xmlbegin();      my $html=&Apache::lonxml::xmlbegin();
Line 3551  sub output_unparsed_phrase_error { Line 3619  sub output_unparsed_phrase_error {
     my ($r,$closebutton,$parms,$hidden_fields,$field)=@_;      my ($r,$closebutton,$parms,$hidden_fields,$field)=@_;
     my $errorstring;      my $errorstring;
     if ($field eq 'basicexp') {      if ($field eq 'basicexp') {
         $errorstring = &mt('Unable to understand the search phrase <i>[_1]</i>.  Please modify your search.',$ENV{'form.basicexp'});          $errorstring = &mt('Unable to understand the search phrase <i>[_1]</i>.  Please modify your search.',$env{'form.basicexp'});
     } else {      } else {
         $errorstring = &mt('Unable to understand the search phrase <b>[_1]</b>:<i>[_2]</i>.',$field,$ENV{'form.'.$field});          $errorstring = &mt('Unable to understand the search phrase <b>[_1]</b>:<i>[_2]</i>.',$field,$env{'form.'.$field});
     }      }
     my $bodytag = &Apache::loncommon::bodytag('Search');      my $bodytag = &Apache::loncommon::bodytag('Search');
     my $heading = &mt('Unparsed Field');      my $heading = &mt('Unparsed Field');
Line 3575  $closebutton Line 3643  $closebutton
 $errorstring  $errorstring
 </p>  </p>
 <p>  <p>
 <a href="/adm/searchcat?$parms&persistent_db_id=$ENV{'form.persistent_db_id'}">$revise</a>  <a href="/adm/searchcat?$parms&persistent_db_id=$env{'form.persistent_db_id'}">$revise</a>
 </p>  </p>
 </body>  </body>
 </html>  </html>
Line 3624  $closebutton Line 3692  $closebutton
 $errormsg  $errormsg
 </p>  </p>
 <p>  <p>
 <a href="/adm/searchcat?$parms&persistent_db_id=$ENV{'form.persistent_db_id'}">$revise</a>&nbsp;  <a href="/adm/searchcat?$parms&persistent_db_id=$env{'form.persistent_db_id'}">$revise</a>&nbsp;
 </p>  </p>
 </body>  </body>
 </html>  </html>

Removed from v.1.242  
changed lines
  Added in v.1.243


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