Diff for /loncom/interface/lonsearchcat.pm between versions 1.345 and 1.363

version 1.345, 2015/06/12 21:11:07 version 1.363, 2025/03/19 15:30:29
Line 144  sub handler { Line 144  sub handler {
     ##     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'})) {
         Time::HiRes::sleep(0.1);          sleep(0.1);
         delete($env{'form.pause'});          delete($env{'form.pause'});
     }      }
     ##      ##
Line 170  sub handler { Line 170  sub handler {
     ##      ##
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
   
     my @allowed_searches = ('portfolio');      my $crumb_text;
       my @allowed_searches;
       if ($env{'form.catalogmode'} eq 'import') {
           $env{'form.area'} = 'res';
           $crumb_text = 'Content Library Search';
       } else {
           push(@allowed_searches,'portfolio');
       }
     if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'}) eq 'F') {      if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'}) eq 'F') {
         push(@allowed_searches,'res');          push(@allowed_searches,'res');
     }       } else {
     my $crumb_text = 'Portfolio Search';          unless ($env{'form.catalogmode'} eq 'import') {
               $env{'form.area'} = 'portfolio';
               $crumb_text = 'Portfolio Search';
           }
       }
     if (@allowed_searches ==2) {      if (@allowed_searches ==2) {
        $crumb_text = 'Portfolio and Catalog Search';          unless (($env{'form.area'} eq 'portfolio') || ($env{'form.area'} eq 'res')) {
              delete($env{'form.area'});
          }
          $crumb_text = 'Portfolio and Content Library Search'; 
       }
       my $target = '_top';
       if ((($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) ||
           (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self'))) {
           if ($env{'form.phase'} =~ /^(sort|run_search)$/) {
               $target = '_parent';
           } else {
               $target = '_self';
           }
     }      }
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
        ({href=>'/adm/searchcat?'.         ({href=>'/adm/searchcat?'.
        &Apache::loncommon::inhibit_menu_check().         &Apache::loncommon::inhibit_menu_check().
                '&catalogmode='.$env{'form.catalogmode'}.                 '&catalogmode='.$env{'form.catalogmode'}.
                '&launch='.$env{'form.launch'}.                 '&launch='.$env{'form.launch'}.
                '&mode='.$env{'form.mode'},                 '&mode='.$env{'form.mode'}.
                  '&area='.$env{'form.area'},
               text=>"$crumb_text",                text=>"$crumb_text",
               target=>'_top',                target=>$target,
               bug=>'Searching',});                bug=>'Searching',});
     #      #
     if ($env{'form.phase'} !~ m/(basic|adv|course)_search/) {      if ($env{'form.phase'} !~ m/(basic|adv|course)_search/) {
Line 299  END Line 323  END
     }      }
     #      #
     if ($env{'form.searchmode'} eq 'advanced') {      if ($env{'form.searchmode'} eq 'advanced') {
         my $srchtype = 'Catalog';          my $srchtype = 'Content Library';
         if ($env{'form.area'} eq 'portfolio') {          if ($env{'form.area'} eq 'portfolio') {
             $srchtype = 'Portfolio';              $srchtype = 'Portfolio';
         }          }
Line 308  END Line 332  END
                   '&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'}.
                     '&area='.$env{'form.area'},
                   text=>"Advanced $srchtype Search",                    text=>"Advanced $srchtype Search",
                   bug=>'Searching',});                    bug=>'Searching',});
     }       } elsif (($env{'form.phase'} eq 'results') ||
                ($env{'form.phase'} =~ /^(sort|run_search)$/)) {
           &Apache::lonhtmlcommon::add_breadcrumb
               ({href=>'/adm/searchcat?'.&Apache::loncommon::inhibit_menu_check().
                 '&phase=disp_adv'.
                 '&catalogmode='.$env{'form.catalogmode'}.
                 '&launch='.$env{'form.launch'}.
                 '&mode='.$env{'form.mode'}.
                 '&area='.$env{'form.area'}.
                 '&searchmode='.$env{'form.searchmode'},
                 text=>"Search Results",
                 bug=>'Searching',});
       }
     ##      ##
     ## Switch on the phase      ## Switch on the phase
     ##      ##
Line 328  END Line 365  END
                  ['query','customquery','customshow',                   ['query','customquery','customshow',
                   'libraries','pretty_string','domains']);                    'libraries','pretty_string','domains']);
         if ($env{'form.phase'} eq 'sort') {          if ($env{'form.phase'} eq 'sort') {
             &print_sort_form($r,$pretty_string);              &print_sort_form($r,$pretty_string,$target);
         } 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,$env{'form.area'},$domainsref);                          $libraries,$pretty_string,$env{'form.area'},$domainsref,$target);
         }          }
     } 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 390  END Line 427  END
         }          }
     }      }
     return OK;      return OK;
 }   }
   
 #  #
 # The mechanism used to store values away and retrieve them does not  # The mechanism used to store values away and retrieve them does not
Line 428  sub hidden_field { Line 465  sub hidden_field {
     return '<input type="hidden" name="'.$name.'" value="'.$value.'" />'.$/;      return '<input type="hidden" name="'.$name.'" value="'.$value.'" />'.$/;
 }  }
   
   sub start_search_tabs {
       my $area;
       my %lt = &Apache::lonlocal::texthash (
                                 res => 'Content Library Search',
                                 portfolio => 'Portfolio Search',
       );
       my $output = '<ul class="LC_TabContentBigger" id="main">';
       if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'}) eq 'F') {
           unless ($env{'form.area'} eq 'portfolio') {
               $area = 'res';
           }
           $output .= "\n".'<li'.($area eq 'res'?' class="active"':'').
                      '><a href="/adm/searchcat?area=res&amp;catalogmode='.$env{'form.catalogmode'}.'">'.
                      '<b>&nbsp;&nbsp;&nbsp;&nbsp;'.$lt{'res'}.
                      '&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>';
           unless ($env{'form.catalogmode'}) {
               $output .= '<li'.($area ne 'res'?' class="active"':'').
                          '><a href="/adm/searchcat?area=portfolio"><b>&nbsp;&nbsp;&nbsp;&nbsp;'.$lt{'portfolio'}.
                          '&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li></ul>';
           }
       } else {
           $area = 'portfolio';
           $output .= "\n".'<li class="active">'.
                      '<a href="/adm/searchcat?area=portfolio"><b>&nbsp;&nbsp;&nbsp;&nbsp;'.$lt{'portfolio'}.
                      '&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li></ul>';
       }
       $output .= '<div class="LC_Box" style="clear:both;margin:0;">'.
                  '<div id="maincoursedoc" style="margin:0 0;padding:0 0;">'.
                  '<div class="LC_ContentBox" id="mainCourseDocuments" style="display: block;">';
       return $output;
   }
   
   sub end_search_tabs {
       return '</div></div></div>';
   }
   
 ######################################################################  ######################################################################
   
 =pod  =pod
Line 444  Prints the form for the basic search.  S Line 517  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 %lt = &Apache::lonlocal::texthash (
                                 res => 'Content Library Search',
                                 portfolio => 'Portfolio Search',
       );
     my $result = ($env{'form.catalogmode'} ne 'import');      my $result = ($env{'form.catalogmode'} ne 'import');
       my $area;
     my $bread_crumb =      my $bread_crumb =
         &Apache::lonhtmlcommon::breadcrumbs('Searching','Search_Basic',          &Apache::lonhtmlcommon::breadcrumbs('Searching','Search_Basic',
     $env{'form.catalogmode'} ne 'import');      $env{'form.catalogmode'} ne 'import');
     my $scrout = &Apache::loncommon::start_page('Content Library').$bread_crumb;      my $scrout = &Apache::loncommon::start_page('Content Library').$bread_crumb.
 # Search form for resource space                    '<div class="LC_landmark" role="main">'."\n".
                    &start_search_tabs();
     if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'}) eq 'F') {      if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'}) eq 'F') {
         $scrout .= &setup_basic_search($r,'res',$hidden_fields,$closebutton);          if ($env{'form.area'} eq 'portfolio') {
         $scrout .= '<hr /><br />';  
     }  
 # 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);
     $scrout .= &Apache::loncommon::end_page();          } else {
   # Search form for resource space
               $scrout .= &setup_basic_search($r,'res',$hidden_fields,$closebutton);
           }
       } else {
   # Search form for accessible portfolio files
           $scrout .= &setup_basic_search($r,'portfolio',$hidden_fields,$closebutton);
       }
       $scrout .= &end_search_tabs().&Apache::loncommon::end_page();
     $r->print($scrout);      $r->print($scrout);
     return;      return;
 }  }
Line 465  sub setup_basic_search { Line 550  sub setup_basic_search {
     my ($r,$area,$hidden_fields,$closebutton) = @_;      my ($r,$area,$hidden_fields,$closebutton) = @_;
     # Define interface components      # Define interface components
     my %lt = &Apache::lonlocal::texthash (      my %lt = &Apache::lonlocal::texthash (
                               res => 'LON-CAPA Catalog Search',                                res => 'Content Library Search',
                               portfolio => 'Portfolio Search',                                portfolio => 'Portfolio Search',
     );      );
     my ($userelatedwords,$onlysearchdomain,$inclext,$adv_search_link,$scrout);      my ($userelatedwords,$onlysearchdomain,$inclext,$adv_search_link,$scrout);
Line 479  sub setup_basic_search { Line 564  sub setup_basic_search {
                      .&mt('use related words')                       .&mt('use related words')
                      .'</label>';                       .'</label>';
   
       my $anydom = 1;
       if ($area eq 'res') {
           unless (&Apache::lonnet::allowed('bre','/res/') eq 'F') {
               $anydom = 0;
           }
       }
       my $singledom;
       my ($disabled,$checked);
       if ($anydom) {
          $singledom = $r->dir_config('lonDefDomain');
          if ($env{'form.domains'} eq $singledom) {
              $checked = 1;
          }
       } else {
          $singledom = $env{'user.domain'};
          $disabled = ' disabled="disabled"';
          $checked = 1; 
       }
     $onlysearchdomain = '<label>'      $onlysearchdomain = '<label>'
                        .&Apache::lonhtmlcommon::checkbox(                         .&Apache::lonhtmlcommon::checkbox(
                            'domains',                             'domains',$checked,
                            $env{'form.domains'},                             $singledom,$disabled)
                            $r->dir_config('lonDefDomain'))  
                        .' '                         .' '
                        .&mt('only search domain [_1]'                         .&mt('only search domain [_1]'
                                ,'<b>'.$r->dir_config('lonDefDomain').'</b>')                                 ,'<b>'.$singledom.'</b>')
                        .'</label>';                         .'</label>';
   
     $adv_search_link = '<a href="/adm/searchcat?'.      $adv_search_link = '<a href="/adm/searchcat?'.
Line 509  sub setup_basic_search { Line 611  sub setup_basic_search {
                  $scrout .= '<input type="hidden" name="area" value="'.$area.'" />';                   $scrout .= '<input type="hidden" name="area" value="'.$area.'" />';
              }               }
     #      #
     $scrout .= '<div align="center">'.$/;      $scrout .= '<div class="LC_floatleft">'.
 #    if ($env{'request.course.id'}) {                 '<label>'.
         $scrout .= '<h1>'.$lt{$area}.'</h1>';                 &Apache::lonhtmlcommon::textbox('basicexp',
 #    } else {                                                 $env{'form.basicexp'},50).
         # No need to tell them they are searching                 '<br />'.
 #        $scrout.= ('<br />'x2);                 '<span class="LC_fontsize_medium">'.&searchhelp().'</span></label></div>'.
 #    }                 '<div class="LC_floatleft" style="text-align: left;">'.
     $scrout.='<table>'.                 '<span class="LC_nobreak">'.('&nbsp;'x3).$adv_search_link.'</span>'.'<br />'.
              '<tr><td align="center" valign="top">'.                 '<span class="LC_nobreak">'.('&nbsp;'x1).$userelatedwords.'</span>'.'<br />'.
              &Apache::lonhtmlcommon::textbox('basicexp',                 '<span class="LC_nobreak">'.('&nbsp;'x1).$onlysearchdomain.'</span>'.'<br />'.
                                              $env{'form.basicexp'},50).                 '<span class="LC_nobreak">'.('&nbsp;'x1).$inclext.'</span>'.'<br />'.
              '<br />'.                 '</div><br clear="both" />'.$/;
             '<span class="LC_fontsize_small">'.&searchhelp().'</span>'.'</td>'.  
             '<td>'.  
             '<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).$onlysearchdomain.'</span>'.'<br />'.  
             '<span class="LC_nobreak">'.('&nbsp;'x1).$inclext.'</span>'.'<br />'.  
              '</td>'.  
             '</tr>'.  
             '</table>'.$/;  
     #      #
     $scrout .= '<p>'      $scrout .= '<div><p>'
               .&viewoptions()                .&viewoptions()
               .'</p>'                .'</p>'
               .'<p>'                .'<p>'
Line 539  sub setup_basic_search { Line 632  sub setup_basic_search {
               .'value="'.&mt('Search').'" />'                .'value="'.&mt('Search').'" />'
               .' '                .' '
               .$closebutton                .$closebutton
               .'</p>';                .'</p></div>';
     #      #
     $scrout .= '</div>'.'</form>';      $scrout .= '</form>';
     return $scrout;      return $scrout;
 }   } 
   
Line 573  sub print_advanced_search_form{ Line 666  sub print_advanced_search_form{
 $closebutton  $closebutton
 </p>  </p>
 END  END
     my $srchtype = 'Catalog';      my $srchtype = 'Content Library';
     my $jscript;      my $jscript;
     if ($env{'form.area'} eq 'portfolio') {      if ($env{'form.area'} eq 'portfolio') {
         $srchtype = 'Portfolio';          $srchtype = 'Portfolio';
Line 591  function additional_metadata() { Line 684  function additional_metadata() {
     }      }
     my $scrout= &Apache::loncommon::start_page("Advanced $srchtype Search",      my $scrout= &Apache::loncommon::start_page("Advanced $srchtype Search",
                                                $jscript);                                                 $jscript);
     $scrout .= $bread_crumb;      $scrout .= $bread_crumb.'<div class="LC_landmark" role="main">'."\n".
                  &start_search_tabs();
   
     $scrout .= '<form method="post" action="/adm/searchcat" name="advsearch">'      $scrout .= '<form method="post" action="/adm/searchcat" name="advsearch">'
               .$hidden_fields                 .$hidden_fields 
Line 610  function additional_metadata() { Line 704  function additional_metadata() {
   
     # Standard Metadata      # Standard Metadata
     $scrout .= &Apache::lonhtmlcommon::row_headline()      $scrout .= &Apache::lonhtmlcommon::row_headline()
               .'<h3>'.&mt("Standard $srchtype Metadata").'</h3>'                .'<h2 class="LC_heading_2">'.&mt("Standard $srchtype Metadata").'</h2>'
               .&searchhelp()                .&searchhelp()
               .&Apache::lonhtmlcommon::row_closure();                .&Apache::lonhtmlcommon::row_closure();
     my %related_word_search =       my %related_word_search = 
Line 630  function additional_metadata() { Line 724  function additional_metadata() {
     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 .= &Apache::lonhtmlcommon::row_title(&titlefield($fields{$field}))          $scrout .= &Apache::lonhtmlcommon::row_title('<label for="'.$field.'">'.
                                                        &titlefield($fields{$field}).'</label>')
                   .&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},
                                           '',                                            '&nbsp;&nbsp;',
                                           $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 .= '<label for="'.$field.'_related">'.&mt('related words').'</label>';
         } else {          } else {
             $scrout .= '';              $scrout .= '';
         }          }
         $scrout .= &Apache::lonhtmlcommon::row_closure();          $scrout .= &Apache::lonhtmlcommon::row_closure();
     }      }
     foreach my $field ('lowestgradelevel','highestgradelevel') {      foreach my $field ('lowestgradelevel','highestgradelevel') {
         $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield($fields{$field}))          $scrout .= &Apache::lonhtmlcommon::row_title('<label for="'.$field.'">'.
                                                        &titlefield($fields{$field}).'</label>')
                   .&Apache::lonmeta::prettyinput($field,                    .&Apache::lonmeta::prettyinput($field,
                                           $env{'form.'.$field},                                            $env{'form.'.$field},'',
                                           $field,                                            $field,
                                           'advsearch',                                            'advsearch',
                                           0)                                            0)
                   .&Apache::lonhtmlcommon::row_closure();                    .&Apache::lonhtmlcommon::row_closure();
     }      }
   
     $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('MIME Type Category')))      $scrout .= &Apache::lonhtmlcommon::row_title('<label for="category">'.
                                                    &titlefield(&mt('MIME Type Category')).'</label>')
               .&Apache::loncommon::filecategoryselect('category',                .&Apache::loncommon::filecategoryselect('category',
                    $env{'form.category'})                     $env{'form.category'},'category')
               .&Apache::lonhtmlcommon::row_closure();                .&Apache::lonhtmlcommon::row_closure();
   
     $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('Domains')))      my $anydomain = 1;
               .&Apache::loncommon::domain_select('domains',      if ($env{'form.area'} ne 'portfolio') {
                    $env{'form.domains'},1)          unless (&Apache::lonnet::allowed('bre','/res/')) {
               .&Apache::lonhtmlcommon::row_closure();              $anydomain = 0; 
           }
       }
   
       $scrout .= &Apache::lonhtmlcommon::row_title('<label for="domains">'.
                                                    &titlefield(&mt('Domains')).'</label>');
       if ($anydomain) {
           my $defdom = &Apache::lonnet::default_login_domain();
           my ($trusted,$untrusted) = &Apache::lonnet::trusted_domains('shared',$defdom);
           $scrout .= &Apache::loncommon::domain_select('domains',
                      $env{'form.domains'},1,$trusted,$untrusted,'domains');
       } else {
           $scrout .= &Apache::loncommon::select_dom_form($env{'user.domain'},
                                                          'domains','','','',
                                                          [$env{'user.domain'}],'',1,'domains');
       }
       $scrout .= &Apache::lonhtmlcommon::row_closure();
   
     # Misc metadata      # Misc metadata
     if ($env{'form.area'} ne 'portfolio') {      if ($env{'form.area'} ne 'portfolio') {
         $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('Copyright/Distribution')))          $scrout .= &Apache::lonhtmlcommon::row_title('<label for="copyright">'.
                                                        &titlefield(&mt('Copyright/Distribution')).'</label>')
                   .&Apache::lonmeta::selectbox('copyright',                    .&Apache::lonmeta::selectbox('copyright',
                                              $env{'form.copyright'},                                               $env{'form.copyright'},'',
                                                'copyright',
                                 \&Apache::loncommon::copyrightdescription,                                  \&Apache::loncommon::copyrightdescription,
                                        ( undef,                                         ( undef,
                                         &Apache::loncommon::copyrightids)                                          &Apache::loncommon::copyrightids)
Line 678  function additional_metadata() { Line 793  function additional_metadata() {
                   .&Apache::lonhtmlcommon::row_closure();                    .&Apache::lonhtmlcommon::row_closure();
     }      }
   
     $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('Language')))      $scrout .= &Apache::lonhtmlcommon::row_title('<label for="language">'.
                                                    &titlefield(&mt('Language')).'</label>')
               .&Apache::lonmeta::selectbox('language',                .&Apache::lonmeta::selectbox('language',
                                     $env{'form.language'},                                      $env{'form.language'},'','language',
                                     \&Apache::loncommon::languagedescription,                                      \&Apache::loncommon::languagedescription,
                                     ('any',&Apache::loncommon::languageids)                                      ('any',&Apache::loncommon::languageids)
                                     )                                      )
Line 693  function additional_metadata() { Line 809  function additional_metadata() {
         if ($curnumadd eq '') {          if ($curnumadd eq '') {
             $curnumadd = 1;              $curnumadd = 1;
         }          }
           my $customlabel = &mt('Text box description');
         $scrout .= &Apache::lonhtmlcommon::row_headline()          $scrout .= &Apache::lonhtmlcommon::row_headline()
                   .'<h3>'.&mt('Custom Metadata fields').'</h3>'                    .'<h3>'.&mt('Custom Metadata fields').'</h3>'
                   .&Apache::lonhtmlcommon::row_closure()                    .&Apache::lonhtmlcommon::row_closure()
                   .&Apache::lonhtmlcommon::row_title('')                    .&Apache::lonhtmlcommon::row_title('<span class="LC_visually_hidden">'.$customlabel.'</span>',
                                                        '','','',1)
                   .&mt('Field Name').' | '.&mt('Field Value(s)')                    .&mt('Field Name').' | '.&mt('Field Value(s)')
                   .&Apache::lonhtmlcommon::row_closure();                    .&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;
               my $namelabel = &mt('name of custom metadata field [_1]',$num);
               my $valuelabel = &mt('value of custom metadata field [_1]',$num);
             $scrout .= &Apache::lonhtmlcommon::row_title(&mt('Custom metadata [_1]',$num))              $scrout .= &Apache::lonhtmlcommon::row_title(&mt('Custom metadata [_1]',$num))
                       .'<input type="text"'                        .'<input type="text" id="addedfield_'.$j.'"'
                       .' name="addedfield_'.$j.'" size="10"'                        .' name="addedfield_'.$j.'" size="10"'
                       .' value="'.$env{'form.addedfield_'.$j}.'" />'                        .' value="'.$env{'form.addedfield_'.$j}.'" aria-label="'.$namelabel.'" />'
                       .' '                        .' '
                       .'<input type="text" '                        .'<input type="text" '
                       .'name="addedvalues_'.$j.'" size="15"'                        .'name="addedvalues_'.$j.'" size="15"'
                       .' value="'.$env{'form.addedvalues_'.$j}.'" />'                        .' value="'.$env{'form.addedvalues_'.$j}.'" aria-label="'.$valuelabel.'" />'
                       .&Apache::lonhtmlcommon::row_closure();                        .&Apache::lonhtmlcommon::row_closure();
         }          }
         $scrout .= &Apache::lonhtmlcommon::row_title('')          my $addcustomlabel = &mt('Add metadata field option');
           $scrout .= &Apache::lonhtmlcommon::row_title('<span class="LC_visually_hidden">'.$addcustomlabel.'</span>',
                                                        '','','',1)
                   .'<label>'                    .'<label>'
                   .'<input type="checkbox" name="newfield"'                    .'<input type="checkbox" name="newfield"'
                   .' value="1" onclick="javascript:additional_metadata()" />'                    .' value="1" onclick="javascript:additional_metadata()" />'
Line 723  function additional_metadata() { Line 845  function additional_metadata() {
 } else {  } else {
         #          #
         # Dynamic metadata          # Dynamic metadata
           my $statslabel = &mt('Text box description');
         $scrout .= &Apache::lonhtmlcommon::row_headline()          $scrout .= &Apache::lonhtmlcommon::row_headline()
                   .'<h3>'.&mt('Problem Statistics').'</h3>'                    .'<h3>'.&mt('Problem Statistics').'</h3>'
                   .&Apache::lonhtmlcommon::row_closure();                    .&Apache::lonhtmlcommon::row_closure();
         $scrout .= &Apache::lonhtmlcommon::row_title('')          $scrout .= &Apache::lonhtmlcommon::row_title('<span class="LC_visually_hidden">'.$statslabel.'</span>',
                                                        '','','',1)
                   .&mt('Minimum').' | '.&mt('Maximum')                    .&mt('Minimum').' | '.&mt('Maximum')
                   .&Apache::lonhtmlcommon::row_closure();                    .&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)',
                  minlabel => 'minimum hit count',
                  maxlabel => 'maximum hit count'},
              { name=>'stdno',               { name=>'stdno',
                description=>                 description=>
                'Statistics calculated for number of students',},                 'Statistics calculated for number of students',
                  minlabel => 'minimum number of students in calculation',
                  maxlabel => 'maximum number of students in calculation'},
              { name => 'avetries',               { name => 'avetries',
                description=>'Average number of tries till solved',},                 description=>'Average number of tries till solved',
                  minlabel => 'minimum average tries till solved',
                  maxlabel => 'maximum average tries till solved'},
              { name => 'difficulty',               { name => 'difficulty',
                description=>'Degree of difficulty',},                 description=>'Degree of difficulty',
                  minlabel => 'minimum degree of difficulty',
                  maxlabel => 'maximum degree of difficulty'},
              { name => 'disc',               { name => 'disc',
                description=>'Degree of discrimination'}) {                 description=>'Degree of discrimination',
                  minlabel => 'minimum degree of discrimination',
                  maxlabel => 'maximum degree of discrimination'}) {
               $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt($statistic->{'description'})))                $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt($statistic->{'description'})))
                         .'<input type="text" name="'.$statistic->{'name'}                          .'<input type="text" name="'.$statistic->{'name'}
                         .'_min" value="" size="6" />'                          .'_min" value="" size="6" aria-label="'.&mt($statistic->{'minlabel'}).'" />'
                         .' '                          .' '
                         .'<input type="text" name="'.$statistic->{'name'}                          .'<input type="text" name="'.$statistic->{'name'}
                         .'_max" value="" size="6" />'                          .'_max" value="" size="6" aria-label="'.&mt($statistic->{'maxlabel'}).'" />'
                         .&Apache::lonhtmlcommon::row_closure();                          .&Apache::lonhtmlcommon::row_closure();
         }          }
           my $evallabel = &mt('Text box description');
         $scrout .= &Apache::lonhtmlcommon::row_headline()          $scrout .= &Apache::lonhtmlcommon::row_headline()
                   .'<h3>'.&mt('Evaluation Data').'</h3>'                    .'<h3>'.&mt('Evaluation Data').'</h3>'
                   .&Apache::lonhtmlcommon::row_closure();                    .&Apache::lonhtmlcommon::row_closure();
         $scrout .= &Apache::lonhtmlcommon::row_title('')          $scrout .= &Apache::lonhtmlcommon::row_title('<span class="LC_visually_hidden">'.$evallabel.'</span>',
                                                        '','','',1)
                   .&mt('Minimum').' | '.&mt('Maximum')                    .&mt('Minimum').' | '.&mt('Maximum')
                   .&Apache::lonhtmlcommon::row_closure();                    .&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',
                   minlabel => 'minimum score: clarity',
                   maxlabel => 'maximum score: clarity'},
               { name =>'depth',                { name =>'depth',
                 description => 'Material covered with sufficient depth'},                  description => 'Material covered with sufficient depth',
                   minlabel => 'minimum score: coverage depth',
                   maxlabel => 'maximum score: coverage depth'},
               { name => 'helpful',                { name => 'helpful',
                 description => 'Material is helpful'},                  description => 'Material is helpful',
                   minlabel => 'minimum score: content helpful',
                   maxlabel => 'maximum score: content helpful'},
               { name => 'correct',                { name => 'correct',
                 description => 'Material appears to be correct'},                  description => 'Material appears to be correct',
                   minlabel => 'minimum score: correctness',
                   maxlabel => 'maximum score: correctness'},
               { name => 'technical',                { name => 'technical',
                 description => 'Resource is technically correct'}){                  description => 'Resource is technically correct',
                   minlabel => 'minimum score: technical correctness',
                   maxlabel => 'maximum score: technical correctness'}) {
             $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt($evaluation->{'description'})))              $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt($evaluation->{'description'})))
                       .'<input type="text" name="'                        .'<input type="text" name="'
                       .$evaluation->{'name'}.'_min" value="" size="6" />'                        .$evaluation->{'name'}.'_min" value="" size="6" aria-label="'.&mt($evaluation->{'minlabel'}).'" />'
                       .' '                        .' '
                       .'<input type="text" name="'                        .'<input type="text" name="'
                       .$evaluation->{'name'}.'_max" value="" size="6" />'                        .$evaluation->{'name'}.'_max" value="" size="6" aria-label="'.&mt($evaluation->{'maxlabel'}).'" />'
                       .&Apache::lonhtmlcommon::row_closure();                        .&Apache::lonhtmlcommon::row_closure();
         }          }
     }      }
     #      #
     # Creation/Modification date limits      # Creation/Modification date limits
       my $dateslabel = &mt('Text box description');
     $scrout .= &Apache::lonhtmlcommon::row_headline()      $scrout .= &Apache::lonhtmlcommon::row_headline()
               .'<h3>'.&mt('Creation and Modification dates').'</h3>'                .'<h3>'.&mt('Creation and Modification dates').'</h3>'
               .&Apache::lonhtmlcommon::row_closure();                .&Apache::lonhtmlcommon::row_closure();
     $scrout .= &Apache::lonhtmlcommon::row_title('')      $scrout .= &Apache::lonhtmlcommon::row_title('<span class="LC_visually_hidden">'.$dateslabel.'</span>',
                                                    '','','',1)
               .&mt('Month[_1]Day[_2]Year','&nbsp;'x14,'&nbsp;'x6)                .&mt('Month[_1]Day[_2]Year','&nbsp;'x14,'&nbsp;'x6)
               .&Apache::lonhtmlcommon::row_closure();                .&Apache::lonhtmlcommon::row_closure();
   
Line 840  function additional_metadata() { Line 987  function additional_metadata() {
     $scrout .= $advanced_buttons      $scrout .= $advanced_buttons
               .'</form>';                .'</form>';
   
     $scrout .= &Apache::loncommon::end_page();      $scrout .= &end_search_tabs().'</div>'.&Apache::loncommon::end_page();
     $r->print($scrout);      $r->print($scrout);
     return;      return;
 }  }
Line 913  sub viewoptions { Line 1060  sub viewoptions {
     if (! defined($env{'form.viewselect'})) {       if (! defined($env{'form.viewselect'})) { 
         $env{'form.viewselect'}='detailed';           $env{'form.viewselect'}='detailed'; 
     }      }
     $scrout .= '<span class="LC_nobreak">'      $scrout .= '<span class="LC_nobreak"><label>'
               .&mt('Type:').' '                .&mt('Type:').' '
               .&Apache::lonmeta::selectbox('viewselect',                .&Apache::lonmeta::selectbox('viewselect',
                    $env{'form.viewselect'},                     $env{'form.viewselect'},'','',
                    \&viewoptiontext,                     \&viewoptiontext,
                    sort(keys(%Views)))                     sort(keys(%Views)))
               .'</span>';                .'</label></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 .= ' <span class="LC_nobreak">'      $scrout .= ' <span class="LC_nobreak"><label>'
               .&mt('Records per Page:').' '.$countselect                .&mt('Records per Page:').' '.$countselect
               .'</span>'.$/;                .'</label></span>'.$/;
     return $scrout;      return $scrout;
 }  }
   
Line 1222  sub parse_advanced_search { Line 1369  sub parse_advanced_search {
     }      }
     if (! $fillflag) {      if (! $fillflag) {
  &output_blank_field_error($r,$closebutton,   &output_blank_field_error($r,$closebutton,
                                   'phase=disp_adv',$hidden_fields);                                    'phase=disp_adv&amp;area='.$env{'form.area'}.
  return ;                                    '&amp;catalogmode='.$env{'form.catalogmode'},
                                     $hidden_fields);
    return;
     }      }
     # Turn the form input into a SQL-based query      # Turn the form input into a SQL-based query
     my $query='';      my $query='';
Line 1236  sub parse_advanced_search { Line 1385  sub parse_advanced_search {
             &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&amp;area='.$env{'form.area'}.
                                            '&amp;catalogmode='.$env{'form.catalogmode'}.
                                          $hidden_fields,$field);                                           $hidden_fields,$field);
             return;              return;
         } else {          } else {
Line 1520  sub parse_basic_search { Line 1671  sub parse_basic_search {
     # 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'.
                                     '&amp;area='.$env{'form.area'}.
                                     '&amp;catalogmode='.$env{'form.catalogmode'});
  return OK;   return OK;
     }      }
     my $pretty_search_string=$search_string;      my $pretty_search_string=$search_string;
Line 1536  sub parse_basic_search { Line 1689  sub parse_basic_search {
                                                     $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'.
                                         '&amp;area='.$env{'form.area'}.
                                         '&amp;catalogmode='.$env{'form.catalogmode'},
                                       '','basicexp');                                        '','basicexp');
         return;          return;
     }      }
Line 1852  sub build_date_queries { Line 2007  sub build_date_queries {
             my (undef,undef,undef,$cbday,$cbmon,$cbyear) = localtime($cbefore);              my (undef,undef,undef,$cbday,$cbmon,$cbyear) = localtime($cbefore);
             # Correct for year being relative to 1900              # Correct for year being relative to 1900
             $cayear+=1900; $cbyear+=1900;              $cayear+=1900; $cbyear+=1900;
               # Correct month; localtime gives month 0..11 but MySQL expects 1..12
               $camon++; $cbmon++;
             my $cquery=              my $cquery=
                 '(creationdate BETWEEN '.                  '(creationdate BETWEEN '.
                 "'".$cayear.'-'.$camon.'-'.$caday."'".                  "'".$cayear.'-'.$camon.'-'.$caday."'".
Line 1870  sub build_date_queries { Line 2027  sub build_date_queries {
             my (undef,undef,undef,$mbday,$mbmon,$mbyear) = localtime($mbefore);              my (undef,undef,undef,$mbday,$mbmon,$mbyear) = localtime($mbefore);
             # Correct for year being relative to 1900              # Correct for year being relative to 1900
             $mayear+=1900; $mbyear+=1900;              $mayear+=1900; $mbyear+=1900;
               # Correct month; localtime gives month 0..11 but MySQL expects 1..12
               $mamon++; $mbmon++;
             my $mquery=              my $mquery=
                 '(lastrevisiondate BETWEEN '.                  '(lastrevisiondate BETWEEN '.
                 "'".$mayear.'-'.$mamon.'-'.$maday."'".                  "'".$mayear.'-'.$mamon.'-'.$maday."'".
Line 1912  sub copyright_check { Line 2071  sub copyright_check {
     my (undef,undef,$resdom,$resname) = split('/',      my (undef,undef,$resdom,$resname) = split('/',
                                               $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) &&          unless (($env{'user.name'} eq $resname) &&
          ($env{'user.domain'} ne $resdom))) {                  ($env{'user.domain'} eq $resdom)) {
         return 0;              return 0;
           }
     }      }
     # Check for domain      # Check for domain
     if (($Metadata->{'copyright'} eq 'domain') &&      if (($Metadata->{'copyright'} eq 'domain') &&
Line 2018  a link to change the search query. Line 2178  a link to change the search query.
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################
 sub print_sort_form {  sub print_sort_form {
     my ($r,$pretty_query_string) = @_;      my ($r,$pretty_query_string,$target) = @_;
   
     ##      ##
     my %SortableFields=&Apache::lonlocal::texthash(       my %SortableFields=&Apache::lonlocal::texthash( 
Line 2051  sub print_sort_form { Line 2211  sub print_sort_form {
         &Apache::lonnet::logthis(&Apache::lonmysql::get_error());          &Apache::lonnet::logthis(&Apache::lonmysql::get_error());
         return;          return;
     }      }
     # update results      my $args;
     my $newloc = '/adm/searchcat?phase=results&persistent_db_id='.      if ($target eq '_parent') {
         $env{'form.persistent_db_id'};          $args = {'links_target' => $target};
     my $js =<<END;      }
 <script type="text/javascript">      my $start_page = &Apache::loncommon::start_page('Results',undef,$args);
     var frame = parent.resultsframe;  
     var frameDoc = frame.document;  
     if (frameDoc.readyState  == 'complete')  
         frame.location = "$newloc";  
 </script>  
 END  
   
     my $start_page = &Apache::loncommon::start_page('Results',$js);  
     my $breadcrumbs=      my $breadcrumbs=
         &Apache::lonhtmlcommon::breadcrumbs('Searching','Searching',          &Apache::lonhtmlcommon::breadcrumbs('Searching','Searching',
     $env{'form.catalogmode'} ne 'import');      $env{'form.catalogmode'} ne 'import',
                                               '','','','','','',$target);
     my $result = <<END;      my $result = <<END;
 $start_page  $start_page
 $breadcrumbs  $breadcrumbs
 <form name="statusform" action="" method="post" target="_top">  <div class="LC_landmark" role="main">
   <form name="statusform" action="" method="post" target="$target">
 <input type="hidden" name="catalogmode" value="import" />  <input type="hidden" name="catalogmode" value="import" />
 <input type="hidden" name="acts" value="" />  <input type="hidden" name="acts" value="" />
 END  END
Line 2093  END Line 2246  END
             .' '.$revise.'</p>'              .' '.$revise.'</p>'
             .'<p>'.&mt('Search: ').$pretty_query_string              .'<p>'.&mt('Search: ').$pretty_query_string
             .'</p></form>';              .'</p></form>';
     $r->print($result.&Apache::loncommon::end_page());      $r->print($result.'</div>'.&Apache::loncommon::end_page());
     return;      return;
 }  }
   
Line 2230  SCRIPT Line 2383  SCRIPT
 sub reload_result_frame {  sub reload_result_frame {
     my ($r) = @_;      my ($r) = @_;
     my $newloc = '/adm/searchcat?phase=results&persistent_db_id='.      my $newloc = '/adm/searchcat?phase=results&persistent_db_id='.
         $env{'form.persistent_db_id'};          $env{'form.persistent_db_id'}.'&area='.$env{'form.area'}.
           '&catalogmode='.$env{'form.catalogmode'};
     $r->print(<<SCRIPT);      $r->print(<<SCRIPT);
 <script type="text/javascript">  <script type="text/javascript">
     var frame = parent.resultsframe;      parent.update_results("$newloc");
     var frameDoc = frame.document;  
     if (frameDoc.readyState  == 'complete')  
         frame.location = "$newloc";  
 </script>  </script>
 SCRIPT  SCRIPT
   
Line 2303  sub revise_button { Line 2454  sub revise_button {
     my $newloc = '/adm/searchcat'.      my $newloc = '/adm/searchcat'.
         '?persistent_db_id='.$env{'form.persistent_db_id'}.          '?persistent_db_id='.$env{'form.persistent_db_id'}.
             '&amp;cleargroupsort=1'.              '&amp;cleargroupsort=1'.
             '&amp;phase='.$revise_phase;              '&amp;phase='.$revise_phase.
               '&amp;area='.$env{'form.area'}.
               '&amp;catalogmode='.$env{'form.catalogmode'};
     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 2325  results into MySQL. Line 2478  results into MySQL.
 ######################################################################  ######################################################################
 sub run_search {  sub run_search {
     my ($r,$query,$customquery,$customshow,$serverlist,      my ($r,$query,$customquery,$customshow,$serverlist,
         $pretty_string,$area,$domainsref) = @_;          $pretty_string,$area,$domainsref,$target) = @_;
     my $tabletype = 'metadata';      my $tabletype = 'metadata';
     if ($area eq 'portfolio') {      if ($area eq 'portfolio') {
         $tabletype = 'portfolio_search';          $tabletype = 'portfolio_search';
Line 2334  sub run_search { Line 2487  sub run_search {
     #      #
     # Print run_search header      # Print run_search header
     #      #
     my $start_page = &Apache::loncommon::start_page('Search Status',undef);      my $args;
       if ($target eq '_parent') {
           $args = {'links_target' => $target};
       }
       my $start_page = &Apache::loncommon::start_page('Search Status',undef,$args);
     my $breadcrumbs =      my $breadcrumbs =
  &Apache::lonhtmlcommon::breadcrumbs('Searching','Searching',   &Apache::lonhtmlcommon::breadcrumbs('Searching','Searching',
     $env{'form.catalogmode'} ne 'import');      $env{'form.catalogmode'} ne 'import',
                                               '','','','','','',$target);
     $r->print(<<END);      $r->print(<<END);
 $start_page  $start_page
 $breadcrumbs  $breadcrumbs
   <div class="LC_landmark" role="main">
 END  END
     # Remove leading and trailing <br />      # Remove leading and trailing <br />
     $pretty_string =~ s:^\s*<br />::i;      $pretty_string =~ s:^\s*<br />::i;
Line 2385  END Line 2544  END
         %all_library_servers = (%library_servers,%older_library_servers);          %all_library_servers = (%library_servers,%older_library_servers);
         @Servers_to_contact = sort(keys(%all_library_servers));          @Servers_to_contact = sort(keys(%all_library_servers));
         foreach my $server (@Servers_to_contact) {          foreach my $server (@Servers_to_contact) {
             my %possdoms;  
             map { $possdoms{$_}=1;  } &Apache::lonnet::machine_domains($all_library_servers{$server});  
             $domains_by_server{$server} =              $domains_by_server{$server} =
                 join(',',sort(&Apache::lonnet::machine_domains($all_library_servers{$server})));                  join(',',sort(&Apache::lonnet::machine_domains($all_library_servers{$server})));
         }          }
Line 2426  END Line 2583  END
     ## Prepare for the big loop.      ## Prepare for the big loop.
     my $hitcountsum;      my $hitcountsum;
     my $oldhitcountsum;      my $oldhitcountsum;
       my $displaycount;
     my %matches;      my %matches;
     my $server;       my $server; 
     my $status;      my $status;
Line 2472  END Line 2630  END
                 &update_status($r,                  &update_status($r,
                        &mt('waiting on [_1]',join(' ',keys(%Server_status))));                         &mt('waiting on [_1]',join(' ',keys(%Server_status))));
             }              }
             Time::HiRes::sleep(0.1);              sleep(0.1);
         }          }
         #          #
         # Loop through the servers we have contacted but do not          # Loop through the servers we have contacted but do not
Line 2525  END Line 2683  END
   
                     if ($area eq 'portfolio') {                      if ($area eq 'portfolio') {
                         next if (defined($matches{$Fields{'url'}}));                          next if (defined($matches{$Fields{'url'}}));
                         # Skip if inaccessible                          # Skip unless access control set to public or passphrase-protected
                         next if (!&Apache::lonnet::portfolio_access($Fields{'url'}));                          next unless (($Fields{'scope'} eq 'public') || ($Fields{'scope'} eq 'guest'));
                         $matches{$Fields{'url'}} = 1;                           $matches{$Fields{'url'}} = 1; 
                     }                      }
                     #                      #
Line 2550  END Line 2708  END
             last if ($connection->aborted());              last if ($connection->aborted());
             if ($oldhitcountsum < $hitcountsum) {              if ($oldhitcountsum < $hitcountsum) {
                 &update_count_status($r,$hitcountsum);                  &update_count_status($r,$hitcountsum);
                 if ($hitcountsum <= $env{'form.show'}) {                  if (($hitcountsum <= $env{'form.show'}) ||
                       (!$displaycount && $hitcountsum)) {
                     reload_result_frame($r);                      reload_result_frame($r);
                       $displaycount = $hitcountsum;
                 }                  }
                 $oldhitcountsum = $hitcountsum;                  $oldhitcountsum = $hitcountsum;
             }              }
Line 2567  END Line 2727  END
     # We have run out of time or run out of servers to talk to and      # We have run out of time or run out of servers to talk to and
     # results to get, 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(&Apache::loncommon::end_page());      $r->print('</div>'.&Apache::loncommon::end_page());
 #    if ($env{'form.catalogmode'} ne 'import') {  #    if ($env{'form.catalogmode'} ne 'import') {
          $r->print(<<SCRIPT);           $r->print(<<SCRIPT);
 <script>  <script>
 window.location='/adm/searchcat?phase=sort&persistent_db_id=$env{'form.persistent_db_id'}';  window.location='/adm/searchcat?phase=sort&area=$env{"form.area"}&catalogmode=$env{"form.catalogmode"}&persistent_db_id=$env{'form.persistent_db_id'}';
 </script>  </script>
 SCRIPT  SCRIPT
 #    }  #    }
Line 2631  sub display_results { Line 2791  sub display_results {
     if (!defined($viewfunction)) {      if (!defined($viewfunction)) {
         $r->print('<p class="LC_error">'          $r->print('<p class="LC_error">'
                  .&mt('Internal Error - Bad view selected.')                   .&mt('Internal Error - Bad view selected.')
                  .'</p>'."\n");                   .'</p>'."\n"
                    .'</form></div>'.&Apache::loncommon::end_page());
         $r->rflush();          $r->rflush();
         return;          return;
     }      }
Line 2642  sub display_results { Line 2803  sub display_results {
     ##      ##
     ## Get the catalog controls setup      ## Get the catalog controls setup
     ##      ##
     my $action = "/adm/searchcat?phase=results";      my $action = "/adm/searchcat?phase=results&amp;area='.$env{'form.area'}.
                    '&amp;catalogmode='.$env{'form.catalogmode'};
     ##      ##
     ## Deal with import by opening the import db file.      ## Deal with import by opening the import db file.
     if ($env{'form.catalogmode'} eq 'import') {      if ($env{'form.catalogmode'} eq 'import') {
Line 2653  sub display_results { Line 2815  sub display_results {
             $r->print('<p class="LC_error">'.              $r->print('<p class="LC_error">'.
               &mt('Unable to save import results.').                &mt('Unable to save import results.').
               '</p>'.                '</p>'.
               '</form>'.                '</form></div>'.
       &Apache::loncommon::end_page());        &Apache::loncommon::end_page());
             $r->rflush();              $r->rflush();
             return;              return;
Line 2674  sub display_results { Line 2836  sub display_results {
         $r->print('<p class="LC_error">'.          $r->print('<p class="LC_error">'.
           &mt('A MySQL error has occurred.').            &mt('A MySQL error has occurred.').
           '</p>'.            '</p>'.
           '</form>'.            '</form></div>'.
   &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 2779  sub display_results { Line 2941  sub display_results {
     $env{'form.sortorder'}='asc';      $env{'form.sortorder'}='asc';
  }   }
     }      }
     my $sortform = '<span class="LC_nobreak">'      my $sortform = '<span class="LC_nobreak"><span id="LC_sortby">'
                   .&mt('Sort by:').' '                    .&mt('Sort by:').'</span> '
                   .&Apache::loncommon::select_form($env{'form.sortfield'},                    .&Apache::loncommon::select_form($env{'form.sortfield'},
                                                       'sortfield',                                                     'sortfield',
                                                       \%sort_fields)                                                     \%sort_fields,'','','',
                                                      'LC_sortby')
                   .' '                    .' '
                   .&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')
                                                        })                                                     },'','','','LC_sortby')
                   .'</span>';                    .'</span>';
     ##      ##
     ## Display links for 'prev' and 'next' pages (if necessary) and Display Options      ## Display links for 'prev' and 'next' pages (if necessary) and Display Options
Line 2803  sub display_results { Line 2966  sub display_results {
     );      );
   
     if ($total_results == 0) {      if ($total_results == 0) {
         $r->print('<p class="LC_info">'.&mt('There are currently no results.').'</p>'.          $r->print('<h1 class="LC_search_results">'.&mt('There are currently no results.').'</h1>'.
                   "</form>".                    '</form></div>'.
   &Apache::loncommon::end_page());    &Apache::loncommon::end_page());
         return;          return;
     } else {      } else {
         $r->print('<div>'.          $r->print('<h1 class="LC_search_results">'.
                   mt('Results [_1] to [_2] out of [_3]',                    mt('Results [_1] to [_2] out of [_3]',
                      $min,$max,$total_results).                       $min,$max,$total_results).
                   "</div>\n");                    "</h1>\n");
     }      }
     ##      ##
     ## Get results from MySQL table      ## Get results from MySQL table
Line 2841  sub display_results { Line 3004  sub display_results {
     if ($area eq 'portfolio') {      if ($area eq 'portfolio') {
         $tabletype = 'portfolio_search';          $tabletype = 'portfolio_search';
     }      }
     $r->print(&Apache::loncommon::start_data_table());      $r->print(&Apache::loncommon::start_data_table().
                 &Apache::loncommon::start_data_table_header_row().
                 '<th>'.&mt('Data').'</th>');
       if (($env{'form.viewselect'} eq 'detailedpreview') ||
           ($env{'form.viewselect'} eq 'summarypreview')) {
           $r->print('<th>'.&mt('Preview').'</th>');
       }
       $r->print(&Apache::loncommon::end_data_table_header_row());
     foreach my $row (@Results) {      foreach my $row (@Results) {
         if ($connection->aborted()) {          if ($connection->aborted()) {
             &cleanup();              &cleanup();
Line 2879  sub display_results { Line 3049  sub display_results {
                                 $env{'form.persistent_db_id'})                                  $env{'form.persistent_db_id'})
         );          );
     }      }
     $r->print("</form>".&Apache::loncommon::end_page());      $r->print('</form></div>'.&Apache::loncommon::end_page());
     $r->rflush();      $r->rflush();
     untie %groupsearch_db if (tied(%groupsearch_db));      untie %groupsearch_db if (tied(%groupsearch_db));
     return;      return;
Line 3176  SCRIPT Line 3346  SCRIPT
 </script>  </script>
 SCRIPT  SCRIPT
   
       $js.=<<SCRIPT;
   <script type="text/javascript">
       \$(document).ready(function() {
           parent.done_loading_results();
       });
   </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,
                                                       'add_wishlist' =>1,                                                        'add_wishlist' =>1,
                                                       'add_modal' =>1});                                                        'add_modal' =>1});
     my $result=<<END;      my $result=<<END;
 $start_page  $start_page
   <div class="LC_landmark" role="main">
 <form name="results" method="post" action="/adm/searchcat">  <form name="results" method="post" action="/adm/searchcat">
 $importbutton  $importbutton
 END  END
Line 3190  END Line 3369  END
   
 sub results_link {  sub results_link {
     my $basic_link   = "/adm/searchcat?"."&amp;table=".$env{'form.table'}.      my $basic_link   = "/adm/searchcat?"."&amp;table=".$env{'form.table'}.
           "&amp;area=".$env{'form.area'}.
           "&amp;catalogmode=".$env{'form.catalogmode'}.
         "&amp;persistent_db_id=".$env{'form.persistent_db_id'};          "&amp;persistent_db_id=".$env{'form.persistent_db_id'};
     my $results_link = $basic_link."&amp;phase=results".      my $results_link = $basic_link."&amp;phase=results".
         "&amp;pause=1"."&amp;start=1";          "&amp;pause=1"."&amp;start=1";
Line 3200  sub results_link { Line 3381  sub results_link {
 ######################################################################  ######################################################################
 sub print_frames_interface {  sub print_frames_interface {
     my $r = shift;      my $r = shift;
     my $basic_link = "/adm/searchcat?"."&amp;table=".$env{'form.table'}.      my $basic_link = "/adm/searchcat?table=".$env{'form.table'}.
           "&amp;area=".$env{'form.area'}.
           "&amp;catalogmode=".$env{'form.catalogmode'}.
         "&amp;persistent_db_id=".$env{'form.persistent_db_id'};          "&amp;persistent_db_id=".$env{'form.persistent_db_id'};
     my $run_search_link = $basic_link."&amp;phase=run_search";      my $run_search_link = $basic_link."&amp;phase=run_search";
     my $results_link = &results_link();      my $results_link = &results_link();
Line 3209  sub print_frames_interface { Line 3392  sub print_frames_interface {
 // <![CDATA[  // <![CDATA[
 var targetwin = opener;  var targetwin = opener;
 var queue = '';  var queue = '';
   
   var loading_results = true;
   var need_reloading = false;
   var new_location;
   function update_results(newloc) {
       if (loading_results) {
           need_reloading = true;
           new_location = newloc;
       } else {
           loading_results = true;
           resultsframe.location = newloc;
       }
   }
   function done_loading_results() {
       loading_results = false;
       if (need_reloading) {
           need_reloading = false;
           update_results(new_location);
       }
   }
 // ]]>  // ]]>
 </script>  </script>
 JS  JS
Line 3321  sub detailed_citation_view { Line 3524  sub detailed_citation_view {
         '<b>'.$prefix.          '<b>'.$prefix.
         '<img src="'.&Apache::loncommon::icon($values{'url'}).'" alt="" />'.'&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" onclick="openMyModal(this.href, 500, 500, \'yes\');return false;">'.$values{'title'}."</a></b>\n".
         &display_tools($values{'title'}, $jumpurl).          &display_tools($values{'title'}, $jumpurl).
         "<p>\n".          "<p>\n".
         '<b>'.$values{'author'}.'</b>,'.          '<b>'.$values{'author'}.'</b>,'.
Line 3454  sub summary_view { Line 3657  sub summary_view {
     my $link = '<br />'.&display_url($jumpurl,1).'<br />';      my $link = '<br />'.&display_url($jumpurl,1).'<br />';
     $result .=      $result .=
         '<a href="'.$jumpurl.'?inhibitmenu=yes"'.          '<a href="'.$jumpurl.'?inhibitmenu=yes"'.
         ' target="preview">'.$values{'title'}.'</a>'.          ' target="preview" onclick="openMyModal(this.href, 500, 500, \'yes\');return false;">'.$values{'title'}.'</a>'.
         &display_tools($values{'title'}, $jumpurl).<<END;          &display_tools($values{'title'}, $jumpurl).<<END;
 <br />  <br />
 $link<br />  $link<br />
Line 3500  sub compact_view { Line 3703  sub compact_view {
     }      }
     $jumpurl = &HTML::Entities::encode($jumpurl,'<>&"');      $jumpurl = &HTML::Entities::encode($jumpurl,'<>&"');
     $result.=' <span class="LC_nobreak">'.      $result.=' <span class="LC_nobreak">'.
  '<a href="'.$jumpurl.'?inhibitmenu=yes" target="preview">'.   '<a href="'.$jumpurl.'?inhibitmenu=yes" target="preview" onclick="openMyModal(this.href, 500, 500, \'yes\');return false;">'.
         &HTML::Entities::encode($values{'title'},'<>&"').'</a></span> '.          &HTML::Entities::encode($values{'title'},'<>&"').'</a></span> '.
         &display_tools($values{'title'}, $jumpurl).          &display_tools($values{'title'}, $jumpurl).
  $link.' <b>'.$values{'author'}.'</b> ('.$values{'domain'}.')';   $link.' <b>'.$values{'author'}.'</b> ('.$values{'domain'}.')';
Line 3516  sub display_url { Line 3719  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 {
           # replace the links to open in a new window
           # (because the search opens in a new window, it gets
           # confusing when the links open a tab in the
           # parent window; ideally we should not force windows)
           my $onclick = " onclick=\"window.open(this.href, '_blank', 'toolbar=1,location=1,menubar=0');return false;\""; 
         $link=&Apache::lonhtmlcommon::crumbs(          $link=&Apache::lonhtmlcommon::crumbs(
                   $url,                    $url,
                   'preview',                    'preview',
                   '',                    '',
                   (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),                    '',
                   $skiplast).' ';                    $skiplast,$onclick).' ';
     }      }
     return $link;      return $link;
 }  }

Removed from v.1.345  
changed lines
  Added in v.1.363


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