Diff for /loncom/interface/lonsearchcat.pm between versions 1.310 and 1.331.4.1

version 1.310, 2009/07/02 17:23:53 version 1.331.4.1, 2012/05/10 18:34:18
Line 118  sub handler { Line 118  sub handler {
                       # This is set and used in &handler() and is also used in                         # This is set and used in &handler() and is also used in 
                       # &output_results().                        # &output_results().
   
     my $loaderror=&Apache::lonnet::overloaderror($r);  
     if ($loaderror) { return $loaderror; }  
     #      #
     my $closebutton;  # button that closes the search window       my $closebutton;  # button that closes the search window 
                       # This button is different for the RAT compared to                        # This button is different for the RAT compared to
Line 153  sub handler { Line 151  sub handler {
     ## Initialize global variables      ## Initialize global variables
     ##      ##
     my $domain  = $r->dir_config('lonDefDomain');      my $domain  = $r->dir_config('lonDefDomain');
     $diropendb= "/home/httpd/perl/tmp/".      my $temp_file_dir = LONCAPA::tempdir();
       $diropendb= $temp_file_dir .
         "$env{'user.domain'}_$env{'user.name'}_sel_res.db";          "$env{'user.domain'}_$env{'user.name'}_sel_res.db";
     #      #
     # set the name of the persistent database      # set the name of the persistent database
Line 164  sub handler { Line 163  sub handler {
         $env{'form.persistent_db_id'} = time;          $env{'form.persistent_db_id'} = time;
     }      }
   
     my $persistent_db_file = "/home/httpd/perl/tmp/".      my $persistent_db_file = $temp_file_dir .
         &escape($domain).          &escape($domain).
             '_'.&escape($env{'user.name'}).              '_'.&escape($env{'user.name'}).
                 '_'.$env{'form.persistent_db_id'}.'_persistent_search.db';                  '_'.$env{'form.persistent_db_id'}.'_persistent_search.db';
Line 175  sub handler { Line 174  sub handler {
     if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) {      if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) {
         push(@allowed_searches,'res');          push(@allowed_searches,'res');
     }       } 
     if (exists($env{'request.course.id'}) && $env{'request.course.id'} ne '') {  
         push(@allowed_searches,'course');  
     }  
     my $crumb_text = 'Portfolio Search';      my $crumb_text = 'Portfolio Search';
     if (@allowed_searches == 3) {      if (@allowed_searches ==2) {
         $crumb_text = 'Course, Portfolio and Catalog Search';         $crumb_text = 'Portfolio and Catalog Search'; 
     } elsif (@allowed_searches ==2) {  
         if (grep(/^res$/,@allowed_searches)) {  
             $crumb_text = 'Portfolio and Catalog Search';   
         } elsif (grep(/^course$/,@allowed_searches)) {  
             $crumb_text = 'Portfolio and Course Search';  
         }  
     }      }
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
        ({href=>'/adm/searchcat?'.         ({href=>'/adm/searchcat?'.
Line 266  sub handler { Line 256  sub handler {
     ## 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='".&mt('CLOSE')."' ";          $closebutton="<input type='button' name='close' value='".&mt('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 'import') {      } elsif ($env{'form.catalogmode'} eq 'import') {
         $closebutton="<input type='button' name='close' value='".&mt('CLOSE')."' ";          $closebutton="<input type='button' name='close' value='".&mt('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 .= ">";          $closebutton .= " />";
         my $txt_import = &mt('IMPORT');          my $txt_import = &mt('IMPORT');
         $importbutton=<<END;          $importbutton=<<END;
 <input type='button' name='import' value='$txt_import'  <input type='button' name='import' value='$txt_import'
 onClick='javascript:select_group()'>  onclick='javascript:select_group()' />
 END  END
     } else {      } else {
         $closebutton = '';          $closebutton = '';
Line 303  END Line 293  END
     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') {  
         $env{'form.searchmode'} = 'course_search';  
     }      }
     #      #
     if ($env{'form.searchmode'} eq 'advanced') {      if ($env{'form.searchmode'} eq 'advanced') {
Line 320  END Line 308  END
                   '&amp;mode='.$env{'form.mode'},                    '&amp;mode='.$env{'form.mode'},
                   text=>"Advanced $srchtype Search",                    text=>"Advanced $srchtype Search",
                   bug=>'Searching',});                    bug=>'Searching',});
     } elsif ($env{'form.searchmode'} eq 'course search') {      } 
         &Apache::lonhtmlcommon::add_breadcrumb  
             ({href=>'/adm/searchcat?'.&Apache::loncommon::inhibit_menu_check().  
                   '&amp;phase=disp_adv'.  
                   'catalogmode='.$env{'form.catalogmode'}.  
                   '&amp;launch='.$env{'form.launch'}.  
                   '&amp;mode='.$env{'form.mode'},  
                   text=>"Course Search",  
                   bug=>'Searching',});  
     }  
     ##      ##
     ## Switch on the phase      ## Switch on the phase
     ##      ##
Line 351  END Line 330  END
             &run_search($r,$query,$customquery,$customshow,              &run_search($r,$query,$customquery,$customshow,
                         $libraries,$pretty_string,$env{'form.area'});                          $libraries,$pretty_string,$env{'form.area'});
         }          }
     } elsif ($env{'form.phase'} eq 'course_search') {  
         &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')) {
         #          #
Line 448  sub hidden_field { Line 425  sub hidden_field {
 }  }
   
 ######################################################################  ######################################################################
 ######################################################################  
 ##  
 ##   Course Search  
 ##  
 ######################################################################  
 ######################################################################  
 {   # Scope the course search to avoid global variables  
 #  
 # Variables For course search  
 my %alreadyseen;  
 my %hash;  
 my $totalfound;  
   
 sub make_symb {  
     my ($id)=@_;  
     my ($mapid,$resid)=split(/\./,$id);  
     my $map=$hash{'map_id_'.$mapid};  
     my $res=$hash{'src_'.$id};  
     my $symb=&Apache::lonnet::encode_symb($map,$resid,$res);  
     return $symb;  
 }  
   
 sub course_search {  
     my $r=shift;  
     my $pretty_search_string = '<b>'.$env{'form.courseexp'}.'</b>';  
     my $search_string = $env{'form.courseexp'};  
     my @New_Words;  
     undef(%alreadyseen);  
     if ($env{'form.crsrelated'}) {  
         ($search_string,@New_Words) = &related_version($env{'form.courseexp'});  
         if (@New_Words) {  
             $pretty_search_string .= ' '.&mt("with related words").": <b>@New_Words</b>.";  
         } else {  
             $pretty_search_string .= ' '.&mt('with no related words').".";  
         }  
     }  
     my $fulltext=$env{'form.crsfulltext'};  
     my $discuss=$env{'form.crsdiscuss'};  
     my @allwords=($search_string,@New_Words);  
     $totalfound=0;  
     $r->print(&Apache::loncommon::start_page('Course Search').  
       '<hr /><center><font size="+2" face="arial">'.  
       $pretty_search_string.'</font></center>'.  
       '<hr /><b>'.&mt('Course content').':</b><br />');  
     $r->rflush();  
 # ======================================================= Go through the course  
     my $c=$r->connection;  
     if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.".db",  
             &GDBM_READER(),0640)) {  
         foreach (sort(keys(%hash))) {  
             if ($c->aborted()) { last; }  
             if (($_=~/^src\_(.+)$/)) {  
  if ($hash{'randomout_'.$1} & !$env{'request.role.adv'}) {  
     next;   
  }  
  my $symb=&make_symb($1);  
                 &checkonthis($r,$1,$hash{$_},0,&Apache::lonnet::gettitle($symb),  
      $fulltext,$symb,@allwords);  
             }  
         }  
         untie(%hash);  
     }  
     unless ($totalfound) {  
  $r->print('<p>'.&mt('No matches found in resources').'.</p>');  
     }  
   
 # Check discussions if requested  
     if ($discuss) {  
         my $totaldiscussions = 0;  
         $r->print('<br /><br /><b>'.&mt('Discussion postings').':</b><br />');   
         my $navmap = Apache::lonnavmaps::navmap->new();  
         if (defined($navmap)) {  
             my @allres=$navmap->retrieveResources();  
             my %discussiontime = &Apache::lonnet::dump('discussiontimes',  
                                    $env{'course.'.$env{'request.course.id'}.'.domain'},  
                                    $env{'course.'.$env{'request.course.id'}.'.num'});  
             foreach my $resource (@allres) {  
                 my $result = '';  
                 my $applies = 0;  
                 my $symb = $resource->symb();  
                 my $ressymb = $symb;  
                 if ($symb =~ m#(___adm/$LONCAPA::domain_re/$LONCAPA::username_re)/(\d+)/bulletinboard$#) {  
                     $ressymb = 'bulletin___'.$2.$1.'/'.$2.'/bulletinboard';  
                     unless ($ressymb =~ m#bulletin___\d+___adm/wrapper#) {  
                         $ressymb=~s#(bulletin___\d+___)#$1adm/wrapper/#;  
                     }  
                 }  
                 if (defined($discussiontime{$ressymb})) {   
                     my %contrib = &Apache::lonnet::restore($ressymb,$env{'request.course.id'},  
                          $env{'course.'.$env{'request.course.id'}.'.domain'},  
                          $env{'course.'.$env{'request.course.id'}.'.num'});  
                     if ($contrib{'version'}) {  
                         for (my $id=1;$id<=$contrib{'version'};$id++) {  
                             unless (($contrib{'hidden'}=~/\.$id\./) || ($contrib{'deleted'}=~/\.$id\./)) {   
                                 if ($contrib{$id.':subject'}) {  
                                     $result .= $contrib{$id.':subject'};  
                                 }  
                                 if ($contrib{$id.':message'}) {  
                                     $result .= $contrib{$id.':message'};  
                                 }  
                                 if ($contrib{$id,':attachmenturl'}) {  
                                     if ($contrib{$id,':attachmenturl'} =~ m-/([^/]+)$-) {  
                                         $result .= $1;  
                                     }  
                                 }  
                                 $applies = &checkwords($result,$applies,@allwords);  
                             }  
                         }  
                     }  
                 }  
 # Does this discussion apply?  
                 if ($applies) {  
                     my ($map,$ind,$url)=&Apache::lonnet::decode_symb($ressymb);  
                     my $disctype = &mt('resource');  
                     if ($url =~ m#/bulletinboard$#) {  
                         if ($url =~m#^adm/wrapper/adm/.*/bulletinboard$#) {  
                             $url =~s#^adm/wrapper##;  
                         }  
                         $disctype = &mt('discussion board');  
                     } else {  
                         $url = '/res/'.$url;  
                     }  
                     if ($url =~ /\?/) {  
                         $url .= '&amp;symb=';  
                     } else {  
                         $url .= '?symb=';  
                     }  
                     $url .= &escape($resource->symb());  
                     my $title = $resource->compTitle();  
                     $r->print('<br /><a href="'.$url.'" target="cat">'.  
                          ($title?$title:$url).'</a>&nbsp;&nbsp;-&nbsp;'.  
                          $disctype.'<br />');  
                     $totaldiscussions++;  
                 } else {  
                     $r->print(' .');  
                 }  
             }  
             unless ($totaldiscussions) {  
                 $r->print('<p>'.&mt('No matches found in postings').'.</p>');  
             }  
         } else {  
             $r->print('<div class="LC_error">'.&mt('An error occurred retrieving information about resources in the course.').'<br />'.&mt('It is recommended that you [_1]re-initialize the course[_2] and then try your search again.','<a href="/adm/roles">','</a>').'</div>');  
         }  
     }  
    
 # =================================================== Done going through course  
     $r->print(&Apache::loncommon::end_page());  
 }  
   
 # =============================== This pulls up a resource and its dependencies  
   
 sub checkonthis {  
     my ($r,$id,$url,$level,$title,$fulltext,$symb,@allwords)=@_;  
     $alreadyseen{$id}=1;  
     if (&Apache::loncommon::connection_aborted($r)) { return; }  
     $r->rflush();  
       
     my $result=$title.' ';  
     if ($env{'request.role.adv'} || !$hash{'encrypted_'.$id}) {  
  $result.=&Apache::lonnet::metadata($url,'title').' '.  
     &Apache::lonnet::metadata($url,'subject').' '.  
     &Apache::lonnet::metadata($url,'abstract').' '.  
     &Apache::lonnet::metadata($url,'keywords');  
     }  
     my ($extension)=($url=~/\.(\w+)$/);  
     if (&Apache::loncommon::fileembstyle($extension) eq 'ssi' &&  
  ($url) && ($fulltext)) {  
  $result.=&Apache::lonnet::ssi_body($url.'?symb='.&escape($symb));  
     }  
     $result=~s/\s+/ /gs;  
     my $applies = 0;  
     $applies = &checkwords($result,$applies,@allwords);  
 # Does this resource apply?  
     if ($applies) {  
        $r->print('<br />');  
        for (my $i=0;$i<=$level*5;$i++) {  
            $r->print('&nbsp;');  
        }  
        my $href=$url;  
        if ($hash{'encrypted_'.$id} && !$env{'request.role.adv'}) {  
    $href=&Apache::lonenc::encrypted($href)  
        .'?symb='.&Apache::lonenc::encrypted($symb);  
        } else {  
    $href.='?symb='.&escape($symb);  
        }  
        $r->print('<a href="'.$href.'" target="cat">'.($title?$title:$url).  
  '</a><br />');  
        $totalfound++;  
     } elsif ($fulltext) {  
        $r->print(' .');  
     }  
     $r->rflush();  
 # Check also the dependencies of this one  
     my $dependencies=  
                 &Apache::lonnet::metadata($url,'dependencies');  
     foreach (split(/\,/,$dependencies)) {  
        if (($_=~/^\/res\//) && (!$alreadyseen{$id})) {   
           &checkonthis($r,$id,$_,$level+1,'',$fulltext,undef,@allwords);  
        }  
     }  
 }  
   
 sub checkwords {  
     my ($result,$applies,@allwords) = @_;  
     foreach (@allwords) {  
         if ($_=~/\w/) {  
             if ($result=~/$_/si) {  
                 $applies++;  
             }  
         }  
     }  
     return $applies;  
 }  
   
 sub untiehash {  
     if (tied(%hash)) {  
         untie(%hash);  
     }  
 }  
   
 } # End of course search scoping  
   
   
 ######################################################################  
 ######################################################################  
   
 =pod   =pod 
   
Line 698  sub print_basic_search_form { Line 450  sub print_basic_search_form {
     }      }
 # Search form for accessible portfolio files  # Search form for accessible portfolio files
     $scrout.= &setup_basic_search($r,'portfolio',$hidden_fields,$closebutton);      $scrout.= &setup_basic_search($r,'portfolio',$hidden_fields,$closebutton);
     if ($env{'request.course.id'}) {  
  my %lt=&Apache::lonlocal::texthash('srch' => 'Search',  
                                            'header' => 'Course Search',  
  'note' => 'Enter terms or phrases, then press "Search" below',  
  'use' => 'use related words',  
  'full' =>'fulltext search (time consuming)',  
          'disc' => 'search discussion postings (resources and discussion boards)',  
    );  
         $scrout.=(<<ENDCOURSESEARCH);  
 <form name="loncapa_search" method="post" action="/adm/searchcat">  
 <center>  
 <hr />  
 <h1>$lt{'header'}</h1>      
 <input type="hidden" name="phase" value="course_search" />  
 $hidden_fields  
 <p>  
 $lt{'note'}.  
 </p>  
 <p>  
 <table>  
 <tr><td>  
 ENDCOURSESEARCH  
         $scrout.='&nbsp;'.  
             &Apache::lonhtmlcommon::textbox('courseexp',  
                                   $env{'form.courseexp'},40);  
         my $crscheckbox =   
             &Apache::lonhtmlcommon::checkbox('crsfulltext',  
                                    $env{'form.crsfulltext'});  
         my $relcheckbox =   
             &Apache::lonhtmlcommon::checkbox('crsrelated',  
    $env{'form.crsrelated'});  
         my $discheckbox =   
             &Apache::lonhtmlcommon::checkbox('crsdiscuss',  
                                    $env{'form.crsrelated'});  
         $scrout.=(<<ENDENDCOURSE);  
 </td></tr>  
 <tr><td><label>$relcheckbox $lt{'use'}</label></td><td></td></tr>  
 <tr><td><label>$crscheckbox $lt{'full'}</label></td><td></td></tr>  
 <tr><td><label>$discheckbox $lt{'disc'}</label></td><td></td></tr>  
 </table><p>  
 &nbsp;<input type="submit" name="coursesubmit" value='$lt{'srch'}' />  
 </p>  
 </center>  
 </form>  
 ENDENDCOURSE  
     }  
     $scrout .= &Apache::loncommon::end_page();      $scrout .= &Apache::loncommon::end_page();
     $r->print($scrout);      $r->print($scrout);
     return;      return;
Line 757  sub setup_basic_search { Line 463  sub setup_basic_search {
                               portfolio => 'Portfolio Search',                                portfolio => 'Portfolio Search',
     );      );
     my ($userelatedwords,$onlysearchdomain,$inclext,$adv_search_link,$scrout);      my ($userelatedwords,$onlysearchdomain,$inclext,$adv_search_link,$scrout);
     $userelatedwords = '<label>'.&mt('[_1] use related words',  
       &Apache::lonhtmlcommon::checkbox('related',$env{'form.related'},'related')).      $userelatedwords = '<label>'
                        '</label>';                        .&Apache::lonhtmlcommon::checkbox(
     $onlysearchdomain = '<label>'.&mt('[_1] only search domain [_2]',                             'related',
       &Apache::lonhtmlcommon::checkbox('domains',$env{'form.domains'},                             $env{'form.related'},
                                        $r->dir_config('lonDefDomain')),                             'related')
       $r->dir_config('lonDefDomain')).                        .' '
                         '</label>';                       .&mt('use related words')
                        .'</label>';
   
       $onlysearchdomain = '<label>'
                          .&Apache::lonhtmlcommon::checkbox(
                              'domains',
                              $env{'form.domains'},
                              $r->dir_config('lonDefDomain'))
                          .' '
                          .&mt('only search domain [_1]'
                                  ,'<b>'.$r->dir_config('lonDefDomain').'</b>')
                          .'</label>';
   
     $adv_search_link = '<a href="/adm/searchcat?'.      $adv_search_link = '<a href="/adm/searchcat?'.
                &Apache::loncommon::inhibit_menu_check().                 &Apache::loncommon::inhibit_menu_check().
        '&amp;phase=disp_adv'.         '&amp;phase=disp_adv'.
Line 785  sub setup_basic_search { Line 503  sub setup_basic_search {
                  $scrout .= '<input type="hidden" name="area" value="'.$area.'" />';                   $scrout .= '<input type="hidden" name="area" value="'.$area.'" />';
              }               }
     #      #
     $scrout .= '<center>'.$/;      $scrout .= '<div align="center">'.$/;
 #    if ($env{'request.course.id'}) {  #    if ($env{'request.course.id'}) {
         $scrout .= '<h1>'.$lt{$area}.'</h1>';          $scrout .= '<h1>'.$lt{$area}.'</h1>';
 #    } else {  #    } else {
Line 797  sub setup_basic_search { Line 515  sub setup_basic_search {
              &Apache::lonhtmlcommon::textbox('basicexp',               &Apache::lonhtmlcommon::textbox('basicexp',
                                              $env{'form.basicexp'},50).                                               $env{'form.basicexp'},50).
              '<br />'.               '<br />'.
             '<font size="-1">'.&searchhelp().'</font>'.'</td>'.              '<span class="LC_fontsize_small">'.&searchhelp().'</span>'.'</td>'.
             '<td><font size="-1">'.              '<td>'.
             '<span class="LC_nobreak">'.('&nbsp;'x3).$adv_search_link.'</span>'.'<br />'.              '<span class="LC_nobreak">'.('&nbsp;'x3).$adv_search_link.'</span>'.'<br />'.
             '<span class="LC_nobreak">'.('&nbsp;'x1).$userelatedwords.'</span>'.'<br />'.              '<span class="LC_nobreak">'.('&nbsp;'x1).$userelatedwords.'</span>'.'<br />'.
             '<span class="LC_nobreak">'.('&nbsp;'x1).$onlysearchdomain.'</span>'.'<br />'.              '<span class="LC_nobreak">'.('&nbsp;'x1).$onlysearchdomain.'</span>'.'<br />'.
             '<span class="LC_nobreak">'.('&nbsp;'x1).$inclext.'</span>'.'<br />'.              '<span class="LC_nobreak">'.('&nbsp;'x1).$inclext.'</span>'.'<br />'.
              '</font></td>'.               '</td>'.
             '</tr>'.$/;              '</tr>'.
               '</table>'.$/;
       #
       $scrout .= '<p>'
                 .&viewoptions()
                 .'</p>'
                 .'<p>'
                 .'<input type="submit" name="basicsubmit" '
                 .'value="'.&mt('Search').'" />'
                 .' '
                 .$closebutton
                 .'</p>';
     #      #
     $scrout .= '<tr><td align="center" colspan="2">'.      $scrout .= '</div>'.'</form>';
                '<font size="-1">'.  
                '<input type="submit" name="basicsubmit" '.  
                'value="'.&mt('Search').'" />'.  
                ('&nbsp;'x2).$closebutton.('&nbsp;'x2). &viewoptions().  
                '</font>'.  
                '</td></tr>'.$/;  
     $scrout .= '</table>'.$/.'</center>'.'</form>';  
     return $scrout;      return $scrout;
 }   } 
   
Line 839  sub print_advanced_search_form{ Line 561  sub print_advanced_search_form{
        'reset' => 'Reset',         'reset' => 'Reset',
        'help' => 'Help');         'help' => 'Help');
     my $advanced_buttons=<<"END";      my $advanced_buttons=<<"END";
   <p>
 <input type="submit" name="advancedsubmit" value='$lt{"srch"}' />  <input type="submit" name="advancedsubmit" value='$lt{"srch"}' />
 <input type="reset" name="reset" value='$lt{"reset"}' />  <input type="reset" name="reset" value='$lt{"reset"}' />
 $closebutton  $closebutton
   </p>
 END  END
     my $srchtype = 'Catalog';      my $srchtype = 'Catalog';
     my $jscript;      my $jscript;
     if ($env{'form.area'} eq 'portfolio') {      if ($env{'form.area'} eq 'portfolio') {
         $srchtype = 'Portfolio';          $srchtype = 'Portfolio';
         $jscript = '<script type="text/javascript">          $jscript = '<script type="text/javascript">
   // <![CDATA[
 function additional_metadata() {  function additional_metadata() {
     if (document.advsearch.newfield.checked) {      if (document.advsearch.newfield.checked) {
         document.advsearch.phase.value = "disp_adv";          document.advsearch.phase.value = "disp_adv";
Line 855  function additional_metadata() { Line 580  function additional_metadata() {
         document.advsearch.submit();          document.advsearch.submit();
     }      }
 }  }
   // ]]>
 </script>';  </script>';
     }      }
     my $scrout= &Apache::loncommon::start_page("Advanced $srchtype Search",      my $scrout= &Apache::loncommon::start_page("Advanced $srchtype Search",
                                                $jscript);                                                 $jscript);
     $scrout .= <<"ENDHEADER";      $scrout .= $bread_crumb;
 $bread_crumb  
 <form method="post" action="/adm/searchcat" name="advsearch">      $scrout .= '<form method="post" action="/adm/searchcat" name="advsearch">'
 <p>                .$hidden_fields 
 $advanced_buttons                .'<input type="hidden" name="phase" value="adv_search" />';
 ENDHEADER  
     $scrout.=('&nbsp;'x2).&viewoptions().'</p>'.$hidden_fields.       $scrout .= '<fieldset>'."\n"
         '<input type="hidden" name="phase" value="adv_search" />';                .'<legend>'.&mt('Display Options').'</legend>'."\n"
                 .&viewoptions()
                 .'</fieldset>';
   
       $scrout .= $advanced_buttons;
   
       $scrout .= &Apache::lonhtmlcommon::start_pick_box();
   
     my %fields=&Apache::lonmeta::fieldnames();      my %fields=&Apache::lonmeta::fieldnames();
     #  
     $scrout .= '<h3>'.&mt("Standard $srchtype Metadata").'</h3>';      # Standard Metadata
     $scrout .= "<table>\n";      $scrout .= &Apache::lonhtmlcommon::row_headline()
     $scrout .= '<tr><td>&nbsp;</td><td colspan="2"><font size="-1">'.                .'<h3>'.&mt("Standard $srchtype Metadata").'</h3>'
         ('&nbsp;'x2).&searchhelp()."</font></td></tr>\n";                .&searchhelp()
                 .&Apache::lonhtmlcommon::row_closure();
     my %related_word_search =       my %related_word_search = 
         ('title'    => 1,          ('title'    => 1,
          'author'   => 0,           'author'   => 0,
Line 884  ENDHEADER Line 618  ENDHEADER
          'abstract' => 1,           'abstract' => 1,
          'standards'=> 1,           'standards'=> 1,
          'mime'     => 1,           'mime'     => 1,
  'subject'  => 1,           'subject'  => 1,
          );           );
     #      #
     foreach my $field ('title','author','subject','owner','authorspace',      foreach my $field ('title','author','subject','owner','authorspace',
        'modifyinguser','keywords','notes','abstract',                         'modifyinguser','keywords','notes','abstract',
        'standards','mime') {                         'standards','mime') {
  $scrout.='<tr><td align="right">'.&titlefield($fields{$field}).'</td><td>'.          $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield($fields{$field}))
     &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">',                                            '',
                                           $env{'form.'.$field.'_related'},                                            $env{'form.'.$field.'_related'},
                                           50);                                            50);
         if ($related_word_search{$field}) {          if ($related_word_search{$field}) {
             $scrout .= &mt('related words');              $scrout .= &mt('related words');
         } else {          } else {
             $scrout .= '</td><td>&nbsp;';              $scrout .= '';
         }          }
         $scrout .= '</td></tr>'.$/;          $scrout .= &Apache::lonhtmlcommon::row_closure();
     }      }
     foreach my $field ('lowestgradelevel','highestgradelevel') {      foreach my $field ('lowestgradelevel','highestgradelevel') {
  $scrout.='<tr>'.          $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield($fields{$field}))
             '<td align="right">'.&titlefield($fields{$field}).'</td>'.                    .&Apache::lonmeta::prettyinput($field,
             '<td colspan="2">'.  
     &Apache::lonmeta::prettyinput($field,  
                                           $env{'form.'.$field},                                            $env{'form.'.$field},
                                           $field,                                            $field,
                                           'advsearch',                                            'advsearch',
   0).                                            0)
                                           '</td></tr>'.$/;                    .&Apache::lonhtmlcommon::row_closure();
     }      }
     $scrout.='<tr><td align="right">'.  
  &titlefield(&mt('MIME Type Category')).'</td><td colspan="2">'.       $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('MIME Type Category')))
     &Apache::loncommon::filecategoryselect('category',                .&Apache::loncommon::filecategoryselect('category',
    $env{'form.category'}).                     $env{'form.category'})
     '</td></tr>'.$/;                .&Apache::lonhtmlcommon::row_closure();
     $scrout.='<tr><td align="right" valign="top">'.  
  &titlefield(&mt('Domains')).'</td><td colspan="2">'.       $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('Domains')))
     &Apache::loncommon::domain_select('domains',                .&Apache::loncommon::domain_select('domains',
    $env{'form.domains'},1).                     $env{'form.domains'},1)
    '<br />';                .&Apache::lonhtmlcommon::row_closure();
      $scrout .= '</td></tr>'.$/;  
     #  
     # Misc metadata      # Misc metadata
     if ($env{'form.area'} ne 'portfolio') {      if ($env{'form.area'} ne 'portfolio') {
         $scrout.='<tr><td align="right" valign="top">'.          $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('Copyright/Distribution')))
          &titlefield(&mt('Copyright/Distribution')).                    .&Apache::lonmeta::selectbox('copyright',
                  '</td><td colspan="2">'.  
                  &Apache::lonmeta::selectbox('copyright',  
                                              $env{'form.copyright'},                                               $env{'form.copyright'},
                                 \&Apache::loncommon::copyrightdescription,                                  \&Apache::loncommon::copyrightdescription,
                                        ( undef,                                         ( undef,
                                         &Apache::loncommon::copyrightids)                                          &Apache::loncommon::copyrightids)
                                 ).'</td></tr>'.$/;                                  )
                     .&Apache::lonhtmlcommon::row_closure();
     }      }
     $scrout.='<tr><td align="right" valign="top">'.  
  &titlefield(&mt('Language')).'</td><td colspan="2">'.      $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('Language')))
         &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>';                                      )
     $scrout .= "</table>\n";                .&Apache::lonhtmlcommon::row_closure();
   
           
       # Portfolio Metadata
     if ($env{'form.area'} eq 'portfolio') {      if ($env{'form.area'} eq 'portfolio') {
         # Added fields          # Added fields
         my $curnumadd = $env{'form.numaddedfields'};          my $curnumadd = $env{'form.numaddedfields'};
         if ($curnumadd eq '') {          if ($curnumadd eq '') {
             $curnumadd = 1;              $curnumadd = 1;
         }          }
         $scrout .= '<h3>'.&mt('Custom Metadata fields').'</h3>';          $scrout .= &Apache::lonhtmlcommon::row_headline()
         $scrout .= "<table>\n";                    .'<h3>'.&mt('Custom Metadata fields').'</h3>'
         $scrout .= '<tr><td>&nbsp;</td><td align="center">'.                    .&Apache::lonhtmlcommon::row_closure()
                    &mt('Field Name').'</td>'.'<td align="center">'.                    .&Apache::lonhtmlcommon::row_title('')
                    &mt('Field Value(s)').'</td></tr>';                    .&mt('Field Name').' | '.&mt('Field Value(s)')
                     .&Apache::lonhtmlcommon::row_closure();
   
         for (my $j=0; $j<$curnumadd; $j++) {          for (my $j=0; $j<$curnumadd; $j++) {
             my $num = $j+1;              my $num = $j+1;
             $scrout .= '<tr><td>'.&mt('Custom metadata [_1]: ',$num).              $scrout .= &Apache::lonhtmlcommon::row_title(&mt('Custom metadata [_1]',$num))
                        '</td><td align="center">'.                        .'<input type="text"'
                        '<input type="text" name="addedfield_'.$j.                        .' name="addedfield_'.$j.'" size="10"'
                        '" size="10" value="'.$env{'form.addedfield_'.$j}.                        .' value="'.$env{'form.addedfield_'.$j}.'" />'
                        '" /></td>'.                        .' '
                        '<td align="center"><input type="text" '.                        .'<input type="text" '
                        'name="addedvalues_'.$j.'" size="15" value="'.                        .'name="addedvalues_'.$j.'" size="15"'
                        $env{'form.addedvalues_'.$j}.'" /></td></tr>';                        .' value="'.$env{'form.addedvalues_'.$j}.'" />'
         }                        .&Apache::lonhtmlcommon::row_closure();
         $scrout .= '<tr><td align="left" colspan="3"><label>'.          }
                    '<input type="checkbox" name="newfield" '.          $scrout .= &Apache::lonhtmlcommon::row_title('')
                    'value="1" onclick="javascript:additional_metadata()" />'.                    .'<label>'
                    &mt('Another custom field/value pair?').'</label>'.                    .'<input type="checkbox" name="newfield"'
                    '<input type="hidden" name="numaddedfields" value="'.                    .' value="1" onclick="javascript:additional_metadata()" />'
                    $curnumadd.'" /></td></tr></table>';                    .&mt('Another custom field/value pair?').'</label>'
     } else {                    .'<input type="hidden" name="numaddedfields"'
                     .' value="'.$curnumadd.'" />'
                     .&Apache::lonhtmlcommon::row_closure();
   } else {
         #          #
         # Dynamic metadata          # Dynamic metadata
         $scrout .= '<h3>'.&mt('Problem Statistics').'</h3>';          $scrout .= &Apache::lonhtmlcommon::row_headline()
         $scrout .= "<table>\n";                    .'<h3>'.&mt('Problem Statistics').'</h3>'
         $scrout .= '<tr><td>&nbsp;</td><td align="center">'.                    .&Apache::lonhtmlcommon::row_closure();
                    &mt('Minimum').'</td>'.'<td align="center">'.          $scrout .= &Apache::lonhtmlcommon::row_title('')
                    &mt('Maximum').'</td></tr>'."\n";                    .&mt('Minimum').' | '.&mt('Maximum')
                     .&Apache::lonhtmlcommon::row_closure();
         foreach my $statistic           foreach my $statistic 
             ({ name=>'count',              ({ name=>'count',
                description=>'Network-wide number of accesses (hits)',},                 description=>'Network-wide number of accesses (hits)',},
Line 1000  ENDHEADER Line 735  ENDHEADER
                description=>'Degree of difficulty',},                 description=>'Degree of difficulty',},
              { name => 'disc',               { name => 'disc',
                description=>'Degree of discrimination'}) {                 description=>'Degree of discrimination'}) {
               $scrout .= '<tr><td align="right">'.                $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt($statistic->{'description'})))
                          &titlefield(&mt($statistic->{'description'})).                          .'<input type="text" name="'.$statistic->{'name'}
                          '</td><td align="center">'.                          .'_min" value="" size="6" />'
                          '<input type="text" name="'.$statistic->{'name'}.                          .' '
                          '_min" value="" size="6" /></td><td align="center">'.                          .'<input type="text" name="'.$statistic->{'name'}
                          '<input type="text" name="'.$statistic->{'name'}.                          .'_max" value="" size="6" />'
                          '_max" value="" size="6" /></td></tr>'.$/;                          .&Apache::lonhtmlcommon::row_closure();
         }          }
         $scrout .= "</table>\n";  
         $scrout .= '<h3>'.&mt('Evaluation Data').'</h3>';          $scrout .= &Apache::lonhtmlcommon::row_headline()
         $scrout .= "<table>\n";                    .'<h3>'.&mt('Evaluation Data').'</h3>'
         $scrout .= '<tr><td>&nbsp;</td><td align="center">'.                    .&Apache::lonhtmlcommon::row_closure();
                    &mt('Minimum').'</td>'.'<td align="center">'.          $scrout .= &Apache::lonhtmlcommon::row_title('')
                    &mt('Maximum').'</td></tr>'."\n";                    .&mt('Minimum').' | '.&mt('Maximum')
                     .&Apache::lonhtmlcommon::row_closure();
         foreach my $evaluation          foreach my $evaluation
             ( { name => 'clear',              ( { name => 'clear',
                 description => 'Material presented in clear way'},                  description => 'Material presented in clear way'},
Line 1025  ENDHEADER Line 761  ENDHEADER
                 description => 'Material appears to be correct'},                  description => 'Material appears to be correct'},
               { name => 'technical',                { name => 'technical',
                 description => 'Resource is technically correct'}){                  description => 'Resource is technically correct'}){
             $scrout .= '<tr><td align="right">'.              $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt($evaluation->{'description'})))
                        &titlefield(&mt($evaluation->{'description'})).                        .'<input type="text" name="'
                        '</td><td align="center">'.                        .$evaluation->{'name'}.'_min" value="" size="6" />'
                        '<input type="text" name="'.                        .' '
                        $evaluation->{'name'}.'_min" value="" size="6" />'.                        .'<input type="text" name="'
                        '</td><td align="center"><input type="text" name="'.                        .$evaluation->{'name'}.'_max" value="" size="6" />'
                        $evaluation->{'name'}.'_max" value="" size="6" />'.                        .&Apache::lonhtmlcommon::row_closure();
                        '</td></tr>'.$/;  
         }          }
         $scrout .= "</table>\n";  
     }      }
     #      #
     # Creation/Modification date limits      # Creation/Modification date limits
     $scrout .= '<h3>'.&mt('Creation and Modification dates').'</h3>';      $scrout .= &Apache::lonhtmlcommon::row_headline()
     $scrout .= "\n<table>\n";                .'<h3>'.&mt('Creation and Modification dates').'</h3>'
     $scrout .= "<tr><td>&nbsp;</td><td>".&mt('Month[_1]Day[_2]Year','&nbsp;'x14,'&nbsp;'x6)."</td></tr>\n";                .&Apache::lonhtmlcommon::row_closure();
       $scrout .= &Apache::lonhtmlcommon::row_title('')
                 .&mt('Month[_1]Day[_2]Year','&nbsp;'x14,'&nbsp;'x6)
                 .&Apache::lonhtmlcommon::row_closure();
   
     my $cafter =       my $cafter = 
         &Apache::lonhtmlcommon::date_setter('advsearch',         # formname          &Apache::lonhtmlcommon::date_setter('advsearch',         # formname
                                             'creationdate1', # fieldname                                              'creationdate1', # fieldname
Line 1059  ENDHEADER Line 797  ENDHEADER
                                             '',          # state                                              '',          # state
                                             1,           # no_hh_mm_ss                                              1,           # no_hh_mm_ss
                                             );                                              );
     $scrout .= '<tr><td align="right">'.&mt('Created between').'</td>'      $scrout .= &Apache::lonhtmlcommon::row_title(&mt('Created between'))
               .'<td>'.$cafter.'</td></tr>'                .$cafter
               .'<tr><td align="right">'.&mt('and').'</td>'                .&Apache::lonhtmlcommon::row_closure(1)
               .'<td>'.$cbefore.'</td></tr>';                .&Apache::lonhtmlcommon::row_title(&mt('and'))
                 .$cbefore
                 .&Apache::lonhtmlcommon::row_closure();
   
     my $lafter =       my $lafter = 
         &Apache::lonhtmlcommon::date_setter('advsearch',          &Apache::lonhtmlcommon::date_setter('advsearch',
                                             'revisiondate1',                                               'revisiondate1', 
Line 1081  ENDHEADER Line 822  ENDHEADER
                                             '',          # state                                              '',          # state
                                             1,           # no_hh_mm_ss                                              1,           # no_hh_mm_ss
                                             );                                              );
     $scrout .= '<tr><td align="right">'.&mt('Last modified between').'</td>'      $scrout .= &Apache::lonhtmlcommon::row_title(&mt('Last modified between'))
               .'<td>'.$lafter.'</td></tr>'                .$lafter
               .'<tr><td align="right">'.&mt('and').'</td>'                .&Apache::lonhtmlcommon::row_closure(1)
               .'<td>'.$lbefore.'</td></tr>';                .&Apache::lonhtmlcommon::row_title(&mt('and'))
     $scrout.="</table>\n";                .$lbefore
     $scrout.=<<ENDDOCUMENT;                .&Apache::lonhtmlcommon::row_closure(1); # Last row of total pick_box
 $advanced_buttons  
 </form>      $scrout .= &Apache::lonhtmlcommon::end_pick_box();
 ENDDOCUMENT  
       $scrout .= $advanced_buttons
                 .'</form>';
   
     $scrout .= &Apache::loncommon::end_page();      $scrout .= &Apache::loncommon::end_page();
     $r->print($scrout);      $r->print($scrout);
     return;      return;
Line 1159  Outputs: text for box with view options Line 903  Outputs: text for box with view options
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################
 sub viewoptions {  sub viewoptions {
     my $scrout = '<span class="LC_nobreak">';      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 .= '<span class="LC_nobreak">'
  $env{'form.viewselect'},                .&mt('Type:').' '
  \&viewoptiontext,                .&Apache::lonmeta::selectbox('viewselect',
  sort(keys(%Views)));                     $env{'form.viewselect'},
     $scrout.= '&nbsp;&nbsp;';                     \&viewoptiontext,
                      sort(keys(%Views)))
                 .'</span>';
     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)      $scrout .= ' <span class="LC_nobreak">'
               .&mt('[_1] Records per Page',$countselect)                .&mt('Records per Page:').' '.$countselect
               .'</span>'.$/;                .'</span>'.$/;
     return $scrout;      return $scrout;
 }  }
Line 1682  sub parse_domain_restrictions { Line 1428  sub parse_domain_restrictions {
         foreach (sort @allowed_domains) {          foreach (sort @allowed_domains) {
             $pretty_domains_string .= "<b>".$_."</b> ";              $pretty_domains_string .= "<b>".$_."</b> ";
         }          }
  my %servers = &Apache::lonnet::get_servers(\@allowed_domains,   my %servers = &Apache::lonnet::get_unique_servers(\@allowed_domains,
    'library');     'library');
  $libraries_to_query = [keys(%servers)];   $libraries_to_query = [keys(%servers)];
     }      }
Line 2154  sub ensure_db_and_table { Line 1900  sub ensure_db_and_table {
     ## Sanity check the table id.      ## Sanity check the table id.
     ##      ##
     if (! defined($table) || $table eq '' || $table =~ /\D/ ) {      if (! defined($table) || $table eq '' || $table =~ /\D/ ) {
         $r->print("Unable to retrieve search results.  ".          $r->print(&Apache::loncommon::start_page(&mt('Error'))
                   "Unable to determine the table results were saved in.  ".  . '<p>table: |'.$table.'|</p>' # SB
   &Apache::loncommon::end_page());                   .'<p class="LC_error">'
                    .&mt('Unable to retrieve search results. '
                        .'Unable to determine the table results were saved in.')
                    .&Apache::loncommon::end_page()
           );
         return undef;          return undef;
     }      }
     ##      ##
Line 2238  sub print_sort_form { Line 1988  sub print_sort_form {
     }      }
     my $js =<<END;      my $js =<<END;
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
     function change_sort() {      function change_sort() {
         var newloc = "/adm/searchcat?phase=results";          var newloc = "/adm/searchcat?phase=results";
         newloc += "&amp;persistent_db_id=$env{'form.persistent_db_id'}";          newloc += "&persistent_db_id=$env{'form.persistent_db_id'}";
         newloc += "&amp;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;
     }      }
   // ]]>
 </script>  </script>
 END  END
   
Line 2387  Returns: Nothing. Line 2139  Returns: Nothing.
 sub update_count_status {  sub update_count_status {
     my ($r,$text) = @_;      my ($r,$text) = @_;
     $text =~ s/\'/\\\'/g;      $text =~ s/\'/\\\'/g;
     $r->print      $r->print(<<SCRIPT);
         ("<script>document.statusform.count.value = ' $text'</script>\n");  <script type="text/javascript">
   // <![CDATA[
   document.statusform.count.value = ' $text'
   // ]]>
   </script>
   SCRIPT
   
     $r->rflush();      $r->rflush();
 }  }
   
 sub update_status {  sub update_status {
     my ($r,$text) = @_;      my ($r,$text) = @_;
     $text =~ s/\'/\\\'/g;      $text =~ s/\'/\\\'/g;
     $r->print      $r->print(<<SCRIPT);
         ("<script>document.statusform.status.value = ' $text'</script>\n");  <script type="text/javascript">
   // <![CDATA[
   document.statusform.status.value = ' $text'
   // ]]>
   </script>
   SCRIPT
   
     $r->rflush();      $r->rflush();
 }  }
   
Line 2423  sub update_seconds { Line 2187  sub update_seconds {
     my ($r) = @_;      my ($r) = @_;
     my $time = &time_left();      my $time = &time_left();
     if (($last_time-$time) > 0) {      if (($last_time-$time) > 0) {
         $r->print("<script>".          $r->print(<<SCRIPT);
                   "document.statusform.seconds.value = '$time'".  <script type="text/javascript">
                   "</script>\n");  // <![CDATA[
   document.statusform.seconds.value = '$time'
   // ]]>
   </script>
   SCRIPT
   
         $r->rflush();          $r->rflush();
     }      }
     $last_time = $time;      $last_time = $time;
Line 2457  sub revise_button { Line 2226  sub revise_button {
             '&amp;cleargroupsort=1'.              '&amp;cleargroupsort=1'.
             '&amp;phase='.$revise_phase;              '&amp;phase='.$revise_phase;
     my $result = qq{<input type="button" value="$revisetext" name="revise"} .      my $result = qq{<input type="button" value="$revisetext" name="revise"} .
         qq{ onClick="parent.location='$newloc';" /> };          qq{ onclick="parent.location='$newloc';" /> };
     return $result;      return $result;
 }  }
   
Line 2517  END Line 2286  END
             @Servers_to_contact = ($serverlist);              @Servers_to_contact = ($serverlist);
         }          }
     } else {      } else {
  my %all_library_servers = &Apache::lonnet::all_library();   my %all_library_servers = &Apache::lonnet::unique_library();
         @Servers_to_contact = sort(keys(%all_library_servers));          @Servers_to_contact = sort(keys(%all_library_servers));
     }      }
     my %Server_status;      my %Server_status;
Line 2614  END Line 2383  END
                 next;                  next;
             }              }
             $status=~s|/||g;              $status=~s|/||g;
            my $datafile=$r->dir_config('lonDaemons').'/tmp/'.$status;  
   
   
              my $datafile=LONCAPA::tempdir().$status;
             if (-e $datafile && ! -e "$datafile.end") {              if (-e $datafile && ! -e "$datafile.end") {
                 &update_status($r,&mt('Receiving results from [_1]',$server));                  &update_status($r,&mt('Receiving results from [_1]',$server));
                 next;                  next;
Line 2678  END Line 2450  END
         last if ($connection->aborted());          last if ($connection->aborted());
         &update_seconds($r);          &update_seconds($r);
     }      }
     &update_status($r,&mt('Search Complete [_1]',$server));      &update_status($r,&mt('Search Complete on Server [_1]',$server));
     &update_seconds($r);      &update_seconds($r);
     #      #
     &Apache::lonmysql::disconnect_from_db(); # This is unneccessary      &Apache::lonmysql::disconnect_from_db(); # This is unneccessary
Line 2688  END Line 2460  END
     # loaded from /adm/searchcat      # loaded from /adm/searchcat
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
 #    if ($env{'form.catalogmode'} ne 'import') {  #    if ($env{'form.catalogmode'} ne 'import') {
         $r->print("<script>".           $r->print(<<SCRIPT);
                       "window.location='/adm/searchcat?".  <script>
                       "phase=sort&".  window.location='/adm/searchcat?phase=sort&persistent_db_id=$env{'form.persistent_db_id'}';
                       "persistent_db_id=$env{'form.persistent_db_id'}';".  </script>
                   "</script>");  SCRIPT
 #    }  #    }
     return;      return;
 }  }
Line 2715  sub prev_next_buttons { Line 2487  sub prev_next_buttons {
     return '' if ($show eq 'all'); # No links if you get them all at once.      return '' if ($show eq 'all'); # No links if you get them all at once.
     #      #
     # Create buttons      # Create buttons
     my $buttons = '<input type="submit" name="prev" value="'.&mt('Prev').'" ';      return '<p class="LC_nobreak">'
     $buttons .= '/>';            .'<input type="submit" name="prev" value="&lt;"'
     $buttons .= '&nbsp;'x3;            .' title="'.&mt('Previous').'" />'
     $buttons .= '<input type="submit" name="reload" '.            .' '
         'value="'.&mt('Reload').'" />';            .'<input type="submit" name="reload" value="'.&mt('Reload').'" />'
     $buttons .= '&nbsp;'x3;            .' '
     $buttons .= '<input type="submit" name="next" value="'.&mt('Next').'" ';            .'<input type="submit" name="next" value="&gt;"'
     $buttons .= '/>';            .' title="'.&mt('Next').'" />'
     return $buttons;            .'</p>';
 }  }
   
 ######################################################################  ######################################################################
Line 2748  sub display_results { Line 2520  sub display_results {
     ##      ##
     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('<p class="LC_error">'
                    .&mt('Internal Error - Bad view selected.')
                    .'</p>'."\n");
         $r->rflush();          $r->rflush();
         return;          return;
     }      }
Line 2765  sub display_results { Line 2539  sub display_results {
     if ($env{'form.catalogmode'} eq 'import') {      if ($env{'form.catalogmode'} eq 'import') {
         if (! tie(%groupsearch_db,'GDBM_File',$diropendb,          if (! tie(%groupsearch_db,'GDBM_File',$diropendb,
                   &GDBM_WRCREAT(),0640)) {                    &GDBM_WRCREAT(),0640)) {
             $r->print('Unable to save import results.</form>'.              $r->print('<p class="LC_error">'.
                 &mt('Unable to save import results.').
                 '</p>'.
                 '</form>'.
       &Apache::loncommon::end_page());        &Apache::loncommon::end_page());
             $r->rflush();              $r->rflush();
             return;              return;
Line 2779  sub display_results { Line 2556  sub display_results {
     ## Get the number of results       ## Get the number of results 
     my $total_results = &Apache::lonmysql::number_of_rows($table);      my $total_results = &Apache::lonmysql::number_of_rows($table);
     if (! defined($total_results)) {      if (! defined($total_results)) {
         $r->print("A MySQL error has occurred.</form>".          $r->print('<p class="LC_error">'.
             &mt('A MySQL error has occurred.').
             '</p>'.
             '</form>'.
   &Apache::loncommon::end_page());    &Apache::loncommon::end_page());
         &Apache::lonnet::logthis("lonmysql was unable to determine the number".          &Apache::lonnet::logthis("lonmysql was unable to determine the number".
                                  " of rows in table ".$table);                                   " of rows in table ".$table);
Line 2884  sub display_results { Line 2664  sub display_results {
     $env{'form.sortorder'}='asc';      $env{'form.sortorder'}='asc';
  }   }
     }      }
     my $sortform = &mt('Sort by [_1] [_2]',      my $sortform = '<span class="LC_nobreak">'
                        &Apache::loncommon::select_form($env{'form.sortfield'},                    .&mt('Sort by:').' '
                     .&Apache::loncommon::select_form($env{'form.sortfield'},
                                                       'sortfield',                                                        'sortfield',
                                                       %sort_fields),                                                        \%sort_fields)
                        &Apache::loncommon::select_form($env{'form.sortorder'},                    .' '
                     .&Apache::loncommon::select_form($env{'form.sortorder'},
                                                       'sortorder',                                                        'sortorder',
                                                       (asc =>&mt('Ascending'),                                                        {asc =>&mt('Ascending'),
                                                        desc=>&mt('Descending')                                                         desc=>&mt('Descending')
                                                        ))                                                         })
                        );                    .'</span>';
     ##      ##
     ## Output links (if necessary) for 'prev' and 'next' pages.      ## Display links for 'prev' and 'next' pages (if necessary) and Display Options
     $r->print      $r->print('<fieldset>'."\n"
         ('<table width="100%"><tr><td width="25%" align="right">'.               .'<legend>'.&mt('Display Options').'</legend>'."\n"
          '<span class="LC_nobreak">'.$sortform.'</span>'.               .$sortform
          '</td><td width="25%" align="right">'.               .' '
          &prev_next_buttons($min,$env{'form.show'},$total_results).               .&viewoptions()
          '</td><td align="right">'.               .'</fieldset>'
          &viewoptions().'</td></tr></table>'               .&prev_next_buttons($min,$env{'form.show'},$total_results)
          );      );
   
     if ($total_results == 0) {      if ($total_results == 0) {
         $r->print('<meta HTTP-EQUIV="Refresh" CONTENT="2" />'.          $r->print('<meta HTTP-EQUIV="Refresh" CONTENT="2" />'.
                   '<h3>'.&mt('There are currently no results').'.</h3>'.                    '<p class="LC_info">'.&mt('There are currently no results.').'</p>'.
                   "</form>".                    "</form>".
   &Apache::loncommon::end_page());    &Apache::loncommon::end_page());
         return;          return;
     } else {      } else {
         $r->print('<center>'.          $r->print('<div>'.
                   mt('Results [_1] to [_2] out of [_3]',                    mt('Results [_1] to [_2] out of [_3]',
                      $min,$max,$total_results).                       $min,$max,$total_results).
                   "</center>\n");                    "</div>\n");
     }      }
     ##      ##
     ## Get results from MySQL table      ## Get results from MySQL table
Line 2944  sub display_results { Line 2727  sub display_results {
     if ($area eq 'portfolio') {      if ($area eq 'portfolio') {
         $tabletype = 'portfolio_search';          $tabletype = 'portfolio_search';
     }      }
       $r->print(&Apache::loncommon::start_data_table());
     foreach my $row (@Results) {      foreach my $row (@Results) {
         if ($connection->aborted()) {          if ($connection->aborted()) {
             &cleanup();              &cleanup();
             return;              return;
         }          }
         my %Fields = %{&parse_row($tabletype,@$row)};          my %Fields = %{&parse_row($tabletype,@$row)};
         my $output="<p>\n";          my $output;
         if (! defined($Fields{'title'}) || $Fields{'title'} eq '') {          if (! defined($Fields{'title'}) || $Fields{'title'} eq '') {
             $Fields{'title'} = 'Untitled';              $Fields{'title'} = 'Untitled';
         }          }
Line 2959  sub display_results { Line 2743  sub display_results {
         # Render the result into html          # Render the result into html
         $output.= &$viewfunction($prefix,%Fields);          $output.= &$viewfunction($prefix,%Fields);
         # Print them out as they come in.          # Print them out as they come in.
         $r->print($output);          $r->print(&Apache::loncommon::start_data_table_row()
                    .'<td>'
                    .$output
                    .'</td>'
                    .&Apache::loncommon::end_data_table_row()
           );
         $r->rflush();          $r->rflush();
     }      }
       $r->print(&Apache::loncommon::end_data_table());
     if (@Results < 1) {      if (@Results < 1) {
         $r->print(&mt("There were no results matching your query"));          $r->print('<p class="LC_info">'
                    .&mt('There were no results matching your query.')
                    .'</p>');
     } else {      } else {
         $r->print          $r->print(
             ('<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'}.
                                 "&amp;phase=results".                                  "&amp;phase=results".
                                 "&amp;persistent_db_id=".                                  "&amp;persistent_db_id=".
                                 $env{'form.persistent_db_id'})                                  $env{'form.persistent_db_id'})
              ."</center>\n"          );
              );  
     }      }
     $r->print("</form>".&Apache::loncommon::end_page());      $r->print("</form>".&Apache::loncommon::end_page());
     $r->rflush();      $r->rflush();
Line 3003  sub catalogmode_output { Line 2793  sub catalogmode_output {
         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
         }          }
Line 3013  END Line 2803  END
         $output.=<<END;          $output.=<<END;
 <font size='-1'>  <font size='-1'>
 <input type="checkbox" name="returnvalues" value="select"  <input type="checkbox" name="returnvalues" value="select"
 onClick="javascript:queue($checkbox_num,$fnum)" />  onclick="javascript:queue($checkbox_num,$fnum)" />
 </font>  </font>
 END  END
     }      }
Line 3182  sub search_results_header { Line 2972  sub search_results_header {
  if (! exists($env{'form.mode'}) || $env{'form.mode'} ne 'edit') {   if (! exists($env{'form.mode'}) || $env{'form.mode'} ne 'edit') {
             $js.=<<SCRIPT;              $js.=<<SCRIPT;
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
     function select_data(title,url) {      function select_data(title,url) {
  changeTitle(title);   changeTitle(title);
  changeURL(url);   changeURL(url);
Line 3197  sub search_results_header { Line 2988  sub search_results_header {
     parent.opener.inf.document.forms.resinfo.elements.u.value=val;      parent.opener.inf.document.forms.resinfo.elements.u.value=val;
  }   }
     }      }
   // ]]>
 </script>  </script>
 SCRIPT  SCRIPT
         } elsif ($env{'form.mode'} eq 'edit') {          } elsif ($env{'form.mode'} eq 'edit') {
Line 3221  END Line 3013  END
   
             $js.=<<SCRIPT;              $js.=<<SCRIPT;
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
 function select_data(title,url) {  function select_data(title,url) {
     changeURL(url);      changeURL(url);
     changeTitle(title);      changeTitle(title);
Line 3235  function changeURL(val) { Line 3028  function changeURL(val) {
         alert("Unable to transfer data to "+url);          alert("Unable to transfer data to "+url);
     }      }
 }  }
   // ]]>
 </script>  </script>
 SCRIPT  SCRIPT
         }          }
Line 3242  SCRIPT Line 3036  SCRIPT
     my $inhibit_menu = "&".&Apache::loncommon::inhibit_menu_check();      my $inhibit_menu = "&".&Apache::loncommon::inhibit_menu_check();
     $js.=<<SCRIPT if $env{'form.catalogmode'} eq 'import';      $js.=<<SCRIPT if $env{'form.catalogmode'} eq 'import';
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
     function queue(checkbox_num,val) {      function queue(checkbox_num,val) {
         if (document.forms.results.returnvalues.length != "undefined" &&          if (document.forms.results.returnvalues.length != "undefined" &&
             typeof(document.forms.results.returnvalues.length) == "number") {              typeof(document.forms.results.returnvalues.length) == "number") {
Line 3260  SCRIPT Line 3055  SCRIPT
     }      }
     function select_group() {      function select_group() {
  parent.window.location=   parent.window.location=
     "/adm/groupsort?mode=$env{'form.mode'}&amp;catalogmode=import$inhibit_menu&amp;acts="+      "/adm/groupsort?mode=$env{'form.mode'}&catalogmode=import$inhibit_menu&acts="+
     parent.statusframe.document.forms.statusform.elements.acts.value;      parent.statusframe.document.forms.statusform.elements.acts.value;
     }      }
   // ]]>
 </script>  </script>
 SCRIPT  SCRIPT
   
     my $start_page  = &Apache::loncommon::start_page(undef,$js,      my $start_page  = &Apache::loncommon::start_page(undef,$js,
      {'only_body' =>1});       {'only_body' =>1,});
     my $result=<<END;      my $result=<<END;
 $start_page  $start_page
 <form name="results" method="post" action="/adm/searchcat">  <form name="results" method="post" action="/adm/searchcat">
Line 3294  sub print_frames_interface { Line 3090  sub print_frames_interface {
     my $results_link = &results_link();      my $results_link = &results_link();
     my $js = <<JS;      my $js = <<JS;
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
 var targetwin = opener;  var targetwin = opener;
 var queue = '';  var queue = '';
   // ]]>
 </script>  </script>
 JS  JS
   
Line 3382  sub detailed_citation_view { Line 3180  sub detailed_citation_view {
     my $jumpurl=$values{'url'};      my $jumpurl=$values{'url'};
     $jumpurl=~s|^/ext/|http://|;      $jumpurl=~s|^/ext/|http://|;
     $result .= '<b>'.$prefix.      $result .= '<b>'.$prefix.
         '<img src="'.&Apache::loncommon::icon($values{'url'}).'" />'.'&nbsp;'.          '<img src="'.&Apache::loncommon::icon($values{'url'}).'" alt="" />'.'&nbsp;'.
         '<a href="'.$jumpurl.'?inhibitmenu=yes" '.          '<a href="'.$jumpurl.'?inhibitmenu=yes" '.
         'target="preview">'.$values{'title'}."</a></b>\n";          'target="preview">'.$values{'title'}."</a></b>\n";
     $result .= "<p>\n";      $result .= "<p>\n";
Line 3451  sub detailed_citation_view { Line 3249  sub detailed_citation_view {
             $result .= '<b>'.&mt($field->{'translate'}).'</b>';              $result .= '<b>'.&mt($field->{'translate'}).'</b>';
             foreach my $item (split(',',$values{$field->{'name'}})){              foreach my $item (split(',',$values{$field->{'name'}})){
                 $item = &Apache::lonnet::clutter($item);                  $item = &Apache::lonnet::clutter($item);
                 $result .= &display_url($item,[2,0,1]);                  $result .= '<br />'.&display_url($item,1).'<br />';
             }              }
         } elsif (exists($field->{'format'}) && $field->{'format'} ne ''){          } elsif (exists($field->{'format'}) && $field->{'format'} ne ''){
             $result.= &mt($field->{'translate'},              $result.= &mt($field->{'translate'},
Line 3459  sub detailed_citation_view { Line 3257  sub detailed_citation_view {
                                   $values{$field->{'name'}}))."<br />\n";                                    $values{$field->{'name'}}))."<br />\n";
         } else {          } else {
             if ($field->{'special'} eq 'url link') {              if ($field->{'special'} eq 'url link') {
                 $result .= &display_url($jumpurl,[3,0,1]);                  $result .= '<br />'.&display_url($jumpurl,1).'<br />';
             } else {              } else {
                 $result.= &mt($field->{'translate'},                  $result.= &mt($field->{'translate'},
                               $values{$field->{'name'}});                                $values{$field->{'name'}});
Line 3474  sub detailed_citation_view { Line 3272  sub detailed_citation_view {
     if (exists($values{'shortabstract'}) && $values{'shortabstract'} ne '') {      if (exists($values{'shortabstract'}) && $values{'shortabstract'} ne '') {
         $result .= '<p>'.$values{'shortabstract'}.'</p>';          $result .= '<p>'.$values{'shortabstract'}.'</p>';
     }      }
     $result .= '<hr />'."\n";  
     return $result;      return $result;
 }  }
   
 sub detailed_citation_preview {  sub detailed_citation_preview {
     my ($prefix,%values)=@_;      my ($prefix,%values)=@_;
     return '<table><tr><td>'.      return &detailed_citation_view($prefix,%values).
            &detailed_citation_view($prefix,%values).  
            '</td><td>'.             '</td><td>'.
            &Apache::lonindexer::showpreview($values{'url'}).             &Apache::lonindexer::showpreview($values{'url'});
            '</td></tr></table><hr />';  
 }  }
   
   
Line 3501  sub detailed_citation_preview { Line 3296  sub detailed_citation_preview {
 sub summary_view {  sub summary_view {
     my ($prefix,%values) = @_;      my ($prefix,%values) = @_;
     my $icon=&Apache::loncommon::icon($values{'url'});      my $icon=&Apache::loncommon::icon($values{'url'});
     my $result=qq{$prefix<img src="$icon" />};      my $result=qq{$prefix<img src="$icon" alt="" />};
     if (exists($env{'form.sortfield'}) &&       if (exists($env{'form.sortfield'}) && 
         $env{'form.sortfield'} !~ /^(default|          $env{'form.sortfield'} !~ /^(default|
                                      author|                                       author|
Line 3516  sub summary_view { Line 3311  sub summary_view {
     }      }
     my $jumpurl=$values{'url'};      my $jumpurl=$values{'url'};
     $jumpurl=~s|^/ext/|http://|;      $jumpurl=~s|^/ext/|http://|;
     my $link = &display_url($jumpurl,[2,0,1]);      my $link = '<br />'.&display_url($jumpurl,1).'<br />';
   
     $result.=<<END;      $result.=<<END;
 <a href="$jumpurl?inhibitmenu=yes"   <a href="$jumpurl?inhibitmenu=yes" 
    target='preview'>$values{'title'}</a> <br />     target="preview">$values{'title'}</a>
 $link <br />  <br />
   $link<br />
 $values{'author'}, $values{'owner'} -- $values{'lastrevisiondate'}<br />  $values{'author'}, $values{'owner'} -- $values{'lastrevisiondate'}<br />
 $values{'copyrighttag'}<br />  $values{'copyrighttag'}<br />
 $values{'extrashow'}  $values{'extrashow'}
 </p>  
 <hr />  
 END  END
     return $result;      return $result;
 }  }
   
 sub summary_preview {  sub summary_preview {
     my ($prefix,%values)=@_;      my ($prefix,%values)=@_;
     return '<table><tr><td>'.      return &summary_view($prefix,%values).
            &summary_view($prefix,%values).  
            '</td><td>'.             '</td><td>'.
            &Apache::lonindexer::showpreview($values{'url'}).             &Apache::lonindexer::showpreview($values{'url'});
            '</td></tr></table><hr />';  
 }  }
   
 ######################################################################  ######################################################################
Line 3556  sub compact_view { Line 3348  sub compact_view {
     my $jumpurl=$values{'url'};      my $jumpurl=$values{'url'};
     $jumpurl=~s|^/ext/|http://|;      $jumpurl=~s|^/ext/|http://|;
   
     my $link = &display_url($jumpurl,[1,1,1]);      my $link = &display_url($jumpurl,1);
           
     my $result =       my $result = 
         $prefix.'<img src="'.&Apache::loncommon::icon($values{'url'}).'" alt="" />';          $prefix.'<img src="'.&Apache::loncommon::icon($values{'url'}).'" alt="" />';
Line 3570  sub compact_view { Line 3362  sub compact_view {
     $result.=' <span class="LC_nobreak">'.      $result.=' <span class="LC_nobreak">'.
  '<a href="'.$jumpurl.'?inhibitmenu=yes" target="preview">'.   '<a href="'.$jumpurl.'?inhibitmenu=yes" target="preview">'.
         &HTML::Entities::encode($values{'title'},'<>&"').'</a></span> '.          &HTML::Entities::encode($values{'title'},'<>&"').'</a></span> '.
  $link.' <b>'.$values{'author'}.'</b> ('.$values{'domain'}.')<br />';   $link.' <b>'.$values{'author'}.'</b> ('.$values{'domain'}.')';
     return $result;      return $result;
 }  }
   
 sub display_url {  sub display_url {
     my ($url,$crumb_args) = @_;      my ($url,$skiplast) = @_;
     my $link;      my $link;
     if ($url=~m|^/ext/|) {      if ($url=~m|^/ext/|) {
  $url=~s|^/ext/|http://|;   $url=~s|^/ext/|http://|;
Line 3583  sub display_url { Line 3375  sub display_url {
     } elsif ($url=~m{^(http://|/uploaded/)}) {      } elsif ($url=~m{^(http://|/uploaded/)}) {
  $link='<span class="LC_filename">'.$url.'</span>';   $link='<span class="LC_filename">'.$url.'</span>';
     } else {      } else {
         $link=&Apache::lonhtmlcommon::crumbs($url,          $link=&Apache::lonhtmlcommon::crumbs(
   'preview',                    $url,
   '',                    'preview',
   (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),@{$crumb_args}).' ';                    '',
                     (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),
                     $skiplast).' ';
     }      }
     return $link;      return $link;
 }  }
Line 3610  sub fielded_format_view { Line 3404  sub fielded_format_view {
     $jumpurl=~s|^/ext/|http://|;      $jumpurl=~s|^/ext/|http://|;
   
     my $result=<<END;      my $result=<<END;
 $prefix <img src="$icon" />  $prefix <img src="$icon" alt="" />
 <dl>  <dl>
 <dt>URL:</dt>  <dt>URL:</dt>
     <dd><a href="$jumpurl?inhibitmenu=yes"       <dd><a href="$jumpurl?inhibitmenu=yes" 
          target='preview'>$values{'url'}</a></dd>           target='preview'>$values{'url'}</a>
       </dd>
 END  END
     foreach my $field ('title','author','domain','subject','keywords','notes',      foreach my $field ('title','author','domain','subject','keywords','notes',
                        'mimetag','language','creationdate','lastrevisiondate',                         'mimetag','language','creationdate','lastrevisiondate',
Line 3636  END Line 3431  END
     }      }
     $result .= "</dl>\n";      $result .= "</dl>\n";
     $result .= $values{'extrashow'};      $result .= $values{'extrashow'};
     $result .= '<hr />'."\n";  
     return $result;      return $result;
 }  }
   
Line 3710  $prefix Line 3504  $prefix
 $xml  $xml
 </pre>  </pre>
 $values{'extrashow'}  $values{'extrashow'}
 <hr />  
 END  END
     return $result;      return $result;
 }  }
Line 3750  sub output_unparsed_phrase_error { Line 3543  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 [_1]. Please modify your search.'
                              ,'<i>'.$env{'form.basicexp'}.'</i>');
     } 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 [_1]: [_2]'
                              ,'<i>'.$field.'</i>'
                              ,$env{'form.'.$field});
     }      }
     my $heading = &mt('Unparsed Field');      my $heading = &mt('Unparsed Field');
     my $revise  = &mt('Revise search request');      my $revise  = &mt('Revise search request');
Line 3766  $hidden_fields Line 3562  $hidden_fields
 $closebutton  $closebutton
 <hr />  <hr />
 <h2>$heading</h2>  <h2>$heading</h2>
 <p>  <p class="LC_warning">
 $errorstring  $errorstring
 </p>  </p>
 <p>  <p>
Line 3798  $parms is extra information to include i Line 3594  $parms is extra information to include i
 ######################################################################  ######################################################################
 sub output_blank_field_error {  sub output_blank_field_error {
     my ($r,$closebutton,$parms,$hidden_fields)=@_;      my ($r,$closebutton,$parms,$hidden_fields)=@_;
     my $errormsg = &mt('You did not fill in enough information for the search to be started.  You need to fill in relevant fields on the search page in order for a query to be processed.');      my $errormsg = &mt('You did not fill in enough information for the search to be started. You need to fill in relevant fields on the search page in order for a query to be processed.');
     my $revise = &mt('Revise Search Request');      my $revise = &mt('Revise Search Request');
     my $heading = &mt('Unactionable Search Queary');      my $heading = &mt('Unactionable Search Query');
     my $start_page = &Apache::loncommon::start_page('Search');      my $start_page = &Apache::loncommon::start_page('Search');
     my $end_page   = &Apache::loncommon::end_page();      my $end_page   = &Apache::loncommon::end_page();
       if ($closebutton) {
           $closebutton = '<p>'.$closebutton.'</p><hr />';
       } else {
           &Apache::lonhtmlcommon::add_breadcrumb
               ({href=>'',
                 text=>$heading,});
           $start_page .= &Apache::lonhtmlcommon::breadcrumbs();
       }
   
     $r->print(<<ENDPAGE);      $r->print(<<ENDPAGE);
 $start_page  $start_page
 <form method="post" action="/adm/searchcat">  <form method="post" action="/adm/searchcat">
 $hidden_fields  $hidden_fields
 $closebutton  $closebutton
 <hr />  </form>
 <h2>$heading</h2>  <h2>$heading</h2>
 <p>  <p class="LC_warning">
 $errormsg  $errormsg
 </p>  </p>
 <p>  <p>
 <a href="/adm/searchcat?$parms&amp;persistent_db_id=$env{'form.persistent_db_id'}">$revise</a>&nbsp;  <a href="/adm/searchcat?$parms&amp;persistent_db_id=$env{'form.persistent_db_id'}">$revise</a>
 </p>  </p>
 $end_page  $end_page
 ENDPAGE  ENDPAGE
Line 3845  sub output_date_error { Line 3650  sub output_date_error {
     # make query information persistent to allow for subsequent revision      # make query information persistent to allow for subsequent revision
     my $start_page = &Apache::loncommon::start_page('Search');      my $start_page = &Apache::loncommon::start_page('Search');
     my $end_page   = &Apache::loncommon::end_page();      my $end_page   = &Apache::loncommon::end_page();
       my $heading = &mt('Error');
     $r->print(<<RESULTS);      $r->print(<<RESULTS);
 $start_page  $start_page
 <form method="post" action="/adm/searchcat">  <form method="post" action="/adm/searchcat">
 $hidden_fields  $hidden_fields
 <input type='button' value='Revise search request'  <input type='button' value='Revise search request'
 onClick='this.form.submit();' />  onclick='this.form.submit();' />
 $closebutton  $closebutton
   </form>
 <hr />  <hr />
 <h3>Error</h3>  <h3>$heading</h3>
 <p>  <p class="LC_error">
 $message  $message
 </p>  </p>
 $end_page  $end_page

Removed from v.1.310  
changed lines
  Added in v.1.331.4.1


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