Diff for /loncom/interface/lonsearchcat.pm between versions 1.278 and 1.303

version 1.278, 2006/12/06 22:22:37 version 1.303, 2008/12/19 23:24:49
Line 138  sub handler { Line 138  sub handler {
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
              ['catalogmode','launch','acts','mode','form','element','pause',               ['catalogmode','launch','acts','mode','form','element','pause',
               'phase','persistent_db_id','table','start','show',                'phase','persistent_db_id','table','start','show',
               'cleargroupsort','titleelement','area']);                'cleargroupsort','titleelement','area','inhibitmenu']);
     ##      ##
     ## The following is a trick - we wait a few seconds if asked to so      ## The following is a trick - we wait a few seconds if asked to so
     ##     the daemon running the search can get ahead of the daemon      ##     the daemon running the search can get ahead of the daemon
Line 190  sub handler { Line 190  sub handler {
     }      }
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
        ({href=>'/adm/searchcat?'.         ({href=>'/adm/searchcat?'.
                'catalogmode='.$env{'form.catalogmode'}.         &Apache::loncommon::inhibit_menu_check().
                  '&catalogmode='.$env{'form.catalogmode'}.
                '&launch='.$env{'form.launch'}.                 '&launch='.$env{'form.launch'}.
                '&mode='.$env{'form.mode'},                 '&mode='.$env{'form.mode'},
               text=>"$crumb_text",                text=>"$crumb_text",
Line 258  sub handler { Line 259  sub handler {
     if (exists($env{'form.area'})) {      if (exists($env{'form.area'})) {
         $hidden_fields .= &hidden_field('area');          $hidden_fields .= &hidden_field('area');
     }      }
       if (exists($env{'form.inhibitmenu'})) {
           $hidden_fields .= &hidden_field('inhibitmenu');
       }
     ##      ##
     ## Configure dynamic components of interface      ## Configure dynamic components of interface
     ##      ##
     if ($env{'form.catalogmode'} eq 'interactive') {      if ($env{'form.catalogmode'} eq 'interactive') {
         $closebutton="<input type='button' name='close' value='CLOSE' ";          $closebutton="<input type='button' name='close' value='".&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 {
Line 270  sub handler { Line 274  sub handler {
         }          }
         $closebutton .=">\n";          $closebutton .=">\n";
     } elsif ($env{'form.catalogmode'} eq 'import') {      } elsif ($env{'form.catalogmode'} eq 'import') {
         $closebutton="<input type='button' name='close' value='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');
         $importbutton=<<END;          $importbutton=<<END;
 <input type='button' name='import' value='IMPORT'  <input type='button' name='import' value='$txt_import'
 onClick='javascript:select_group()'>  onClick='javascript:select_group()'>
 END  END
     } else {      } else {
Line 308  END Line 313  END
             $srchtype = 'Portfolio';              $srchtype = 'Portfolio';
         }          }
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>'/adm/searchcat?phase=disp_adv&'.              ({href=>'/adm/searchcat?'.&Apache::loncommon::inhibit_menu_check().
                   'catalogmode='.$env{'form.catalogmode'}.    '&phase=disp_adv'.
                     '&catalogmode='.$env{'form.catalogmode'}.
                   '&launch='.$env{'form.launch'}.                    '&launch='.$env{'form.launch'}.
                   '&mode='.$env{'form.mode'},                    '&mode='.$env{'form.mode'},
                   text=>"Advanced $srchtype Search",                    text=>"Advanced $srchtype Search",
                   bug=>'Searching',});                    bug=>'Searching',});
     } elsif ($env{'form.searchmode'} eq 'course search') {      } elsif ($env{'form.searchmode'} eq 'course search') {
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>'/adm/searchcat?phase=disp_adv&'.              ({href=>'/adm/searchcat?'.&Apache::loncommon::inhibit_menu_check().
     '&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'},
Line 379  END Line 386  END
                                      $errorstring);                                       $errorstring);
   
     my $msg =       my $msg = 
  'Unable to create table in which to store search results. '.   'Unable to create table in which to save search results. '.
  'The search has been aborted.';   'The search has been aborted.';
     &Apache::loncommon::simple_error_page($r,'Search Error',      &Apache::loncommon::simple_error_page($r,'Search Error',
   $msg);    $msg);
Line 388  END Line 395  END
         delete($env{'form.launch'});          delete($env{'form.launch'});
         if (! &make_form_data_persistent($r,$persistent_db_file)) {          if (! &make_form_data_persistent($r,$persistent_db_file)) {
     my $msg=      my $msg=
  'Unable to properly store search information. '.   'Unable to properly save search information. '.
  'The search has been aborted.';   'The search has been aborted.';
     &Apache::loncommon::simple_error_page($r,'Search Error',      &Apache::loncommon::simple_error_page($r,'Search Error',
   $msg);    $msg);
Line 512  sub course_search { Line 519  sub course_search {
         my $totaldiscussions = 0;          my $totaldiscussions = 0;
         $r->print('<br /><br /><b>'.&mt('Discussion postings').':</b><br />');           $r->print('<br /><br /><b>'.&mt('Discussion postings').':</b><br />'); 
         my $navmap = Apache::lonnavmaps::navmap->new();          my $navmap = Apache::lonnavmaps::navmap->new();
         my @allres=$navmap->retrieveResources();          if (defined($navmap)) {
         my %discussiontime = &Apache::lonnet::dump('discussiontimes',              my @allres=$navmap->retrieveResources();
                                $env{'course.'.$env{'request.course.id'}.'.domain'},              my %discussiontime = &Apache::lonnet::dump('discussiontimes',
                                $env{'course.'.$env{'request.course.id'}.'.num'});                                     $env{'course.'.$env{'request.course.id'}.'.domain'},
         foreach my $resource (@allres) {                                     $env{'course.'.$env{'request.course.id'}.'.num'});
             my $result = '';              foreach my $resource (@allres) {
             my $applies = 0;                  my $result = '';
             my $symb = $resource->symb();                  my $applies = 0;
             my $ressymb = $symb;                  my $symb = $resource->symb();
             if ($symb =~ m#(___adm/$LONCAPA::domain_re/$LONCAPA::username_re)/(\d+)/bulletinboard$#) {                  my $ressymb = $symb;
                 $ressymb = 'bulletin___'.$2.$1.'/'.$2.'/bulletinboard';                  if ($symb =~ m#(___adm/$LONCAPA::domain_re/$LONCAPA::username_re)/(\d+)/bulletinboard$#) {
                 unless ($ressymb =~ m#bulletin___\d+___adm/wrapper#) {                      $ressymb = 'bulletin___'.$2.$1.'/'.$2.'/bulletinboard';
                     $ressymb=~s#(bulletin___\d+___)#$1adm/wrapper/#;                      unless ($ressymb =~ m#bulletin___\d+___adm/wrapper#) {
                           $ressymb=~s#(bulletin___\d+___)#$1adm/wrapper/#;
                       }
                 }                  }
             }                  if (defined($discussiontime{$ressymb})) { 
             if (defined($discussiontime{$ressymb})) {                       my %contrib = &Apache::lonnet::restore($ressymb,$env{'request.course.id'},
                 my %contrib = &Apache::lonnet::restore($ressymb,$env{'request.course.id'},                           $env{'course.'.$env{'request.course.id'}.'.domain'},
                      $env{'course.'.$env{'request.course.id'}.'.domain'},                           $env{'course.'.$env{'request.course.id'}.'.num'});
                      $env{'course.'.$env{'request.course.id'}.'.num'});                      if ($contrib{'version'}) {
                 if ($contrib{'version'}) {                          for (my $id=1;$id<=$contrib{'version'};$id++) {
                     for (my $id=1;$id<=$contrib{'version'};$id++) {                              unless (($contrib{'hidden'}=~/\.$id\./) || ($contrib{'deleted'}=~/\.$id\./)) { 
                         unless (($contrib{'hidden'}=~/\.$id\./) || ($contrib{'deleted'}=~/\.$id\./)) {                                   if ($contrib{$id.':subject'}) {
                             if ($contrib{$id.':subject'}) {                                      $result .= $contrib{$id.':subject'};
                                 $result .= $contrib{$id.':subject'};                                  }
                             }                                  if ($contrib{$id.':message'}) {
                             if ($contrib{$id.':message'}) {                                      $result .= $contrib{$id.':message'};
                                 $result .= $contrib{$id.':message'};  
                             }  
                             if ($contrib{$id,':attachmenturl'}) {  
                                 if ($contrib{$id,':attachmenturl'} =~ m-/([^/]+)$-) {  
                                     $result .= $1;  
                                 }                                  }
                                   if ($contrib{$id,':attachmenturl'}) {
                                       if ($contrib{$id,':attachmenturl'} =~ m-/([^/]+)$-) {
                                           $result .= $1;
                                       }
                                   }
                                   $applies = &checkwords($result,$applies,@allwords);
                             }                              }
                             $applies = &checkwords($result,$applies,@allwords);  
                         }                          }
                     }                      }
                 }                  }
             }  
 # Does this discussion apply?  # Does this discussion apply?
             if ($applies) {                  if ($applies) {
                 my ($map,$ind,$url)=&Apache::lonnet::decode_symb($ressymb);                      my ($map,$ind,$url)=&Apache::lonnet::decode_symb($ressymb);
                 my $disctype = &mt('resource');                      my $disctype = &mt('resource');
                 if ($url =~ m#/bulletinboard$#) {                      if ($url =~ m#/bulletinboard$#) {
                     if ($url =~m#^adm/wrapper/adm/.*/bulletinboard$#) {                          if ($url =~m#^adm/wrapper/adm/.*/bulletinboard$#) {
                         $url =~s#^adm/wrapper##;                              $url =~s#^adm/wrapper##;
                           }
                           $disctype = &mt('bulletin board');
                       } else {
                           $url = '/res/'.$url;
                     }                      }
                     $disctype = &mt('bulletin board');                      if ($url =~ /\?/) {
                 } else {                          $url .= '&symb=';
                     $url = '/res/'.$url;                      } else {
                 }                          $url .= '?symb=';
                 if ($url =~ /\?/) {                      }
                     $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 {                  } else {
                     $url .= '?symb=';                      $r->print(' .');
                 }                  }
                 $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) {
         unless ($totaldiscussions) {                  $r->print('<p>'.&mt('No matches found in postings').'.</p>');
             $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>');
         }          }
     }      }
     
Line 750  sub setup_basic_search { Line 762  sub setup_basic_search {
                        '</label>';                         '</label>';
     $onlysearchdomain = '<label>'.&mt('[_1] only search domain [_2]',      $onlysearchdomain = '<label>'.&mt('[_1] only search domain [_2]',
       &Apache::lonhtmlcommon::checkbox('domains',$env{'form.domains'},        &Apache::lonhtmlcommon::checkbox('domains',$env{'form.domains'},
                                        $r->dir_config('lonDefDomain'))).                                         $r->dir_config('lonDefDomain')),
         $r->dir_config('lonDefDomain')).
                         '</label>';                          '</label>';
     if ($area eq 'res') {  
         $inclext= '<label>'.&mt('[_1] include external resources',  
              &Apache::lonhtmlcommon::checkbox('inclext',$env{'form.inclext'})).  
                   '</label>';  
     }  
     $adv_search_link = '<a href="/adm/searchcat?'.      $adv_search_link = '<a href="/adm/searchcat?'.
                        'phase=disp_adv&'.                 &Apache::loncommon::inhibit_menu_check().
                        'catalogmode='.$env{'form.catalogmode'}.         '&phase=disp_adv'.
                          '&catalogmode='.$env{'form.catalogmode'}.
                        '&launch='.$env{'form.launch'}.                         '&launch='.$env{'form.launch'}.
                        '&mode='.$env{'form.mode'}.                         '&mode='.$env{'form.mode'}.
                        '&area='.$area.                         '&area='.$area.
                          '&form='.$env{'form.form'}.
                          '&titleelement='.$env{'form.titleelement'}.
                          '&element='.$env{'form.element'}.
                        '">'.&mt('Advanced Search').'</a>';                         '">'.&mt('Advanced Search').'</a>';
     #      #
     $scrout.='<form name="loncapa_search" method="post" '.      $scrout.='<form name="loncapa_search" method="post" '.
Line 787  sub setup_basic_search { Line 799  sub setup_basic_search {
              '<br />'.               '<br />'.
             '<font size="-1">'.&searchhelp().'</font>'.'</td>'.              '<font size="-1">'.&searchhelp().'</font>'.'</td>'.
             '<td><font size="-1">'.              '<td><font size="-1">'.
             '<nobr>'.('&nbsp;'x3).$adv_search_link.'</nobr>'.'<br />'.              '<span class="LC_nobreak">'.('&nbsp;'x3).$adv_search_link.'</span>'.'<br />'.
             '<nobr>'.('&nbsp;'x1).$userelatedwords.'</nobr>'.'<br />'.              '<span class="LC_nobreak">'.('&nbsp;'x1).$userelatedwords.'</span>'.'<br />'.
             '<nobr>'.('&nbsp;'x1).$onlysearchdomain.'</nobr>'.'<br />'.              '<span class="LC_nobreak">'.('&nbsp;'x1).$onlysearchdomain.'</span>'.'<br />'.
             '<nobr>'.('&nbsp;'x1).$inclext.'</nobr>'.'<br />'.              '<span class="LC_nobreak">'.('&nbsp;'x1).$inclext.'</span>'.'<br />'.
              '</font></td>'.               '</font></td>'.
             '</tr>'.$/;              '</tr>'.$/;
     #      #
Line 832  sub print_advanced_search_form{ Line 844  sub print_advanced_search_form{
 $closebutton  $closebutton
 END  END
     my $srchtype = 'Catalog';      my $srchtype = 'Catalog';
       my $jscript;
     if ($env{'form.area'} eq 'portfolio') {      if ($env{'form.area'} eq 'portfolio') {
         $srchtype = 'Portfolio';          $srchtype = 'Portfolio';
           $jscript = '<script type="text/javascript">
   function additional_metadata() {
       if (document.advsearch.newfield.checked) {
           document.advsearch.phase.value = "disp_adv";
           document.advsearch.numaddedfields.value = parseInt(document.advsearch.numaddedfields.value) +1;
           document.advsearch.submit();
     }      }
     my $scrout= &Apache::loncommon::start_page("Advanced $srchtype Search");  }
   </script>';
       }
       my $scrout= &Apache::loncommon::start_page("Advanced $srchtype Search",
                                                  $jscript);
     $scrout .= <<"ENDHEADER";      $scrout .= <<"ENDHEADER";
 $bread_crumb  $bread_crumb
 <form method="post" action="/adm/searchcat" name="advsearch">  <form method="post" action="/adm/searchcat" name="advsearch">
Line 846  ENDHEADER Line 869  ENDHEADER
         '<input type="hidden" name="phase" value="adv_search" />';          '<input type="hidden" name="phase" value="adv_search" />';
     my %fields=&Apache::lonmeta::fieldnames();      my %fields=&Apache::lonmeta::fieldnames();
     #      #
     $scrout .= '<h3>'.&mt('Standard [_1] Metadata',$srchtype).'</h3>';      $scrout .= '<h3>'.&mt("Standard $srchtype Metadata").'</h3>';
     $scrout .= "<table>\n";      $scrout .= "<table>\n";
     $scrout .= '<tr><td>&nbsp;</td><td colspan="2"><font size="-1">'.      $scrout .= '<tr><td>&nbsp;</td><td colspan="2"><font size="-1">'.
         ('&nbsp;'x2).&searchhelp()."</font></td></tr>\n";          ('&nbsp;'x2).&searchhelp()."</font></td></tr>\n";
Line 877  ENDHEADER Line 900  ENDHEADER
                                           $env{'form.'.$field.'_related'},                                            $env{'form.'.$field.'_related'},
                                           50);                                            50);
         if ($related_word_search{$field}) {          if ($related_word_search{$field}) {
             $scrout .= 'related words';              $scrout .= &mt('related words');
         } else {          } else {
             $scrout .= '</td><td>&nbsp;';              $scrout .= '</td><td>&nbsp;';
         }          }
Line 904  ENDHEADER Line 927  ENDHEADER
     &Apache::loncommon::domain_select('domains',      &Apache::loncommon::domain_select('domains',
    $env{'form.domains'},1).     $env{'form.domains'},1).
    '<br /><label>';     '<br /><label>';
             if ($env{'form.area'} ne 'portfolio') {  
                 $scrout .= &mt('[_1] include external resources',  
                            &Apache::lonhtmlcommon::checkbox  
                            ('inclext',$env{'form.inclext'})).'</label>'  
             }  
      $scrout .= '</td></tr>'.$/;       $scrout .= '</td></tr>'.$/;
     #      #
     # Misc metadata      # Misc metadata
Line 935  ENDHEADER Line 953  ENDHEADER
           
     if ($env{'form.area'} eq 'portfolio') {      if ($env{'form.area'} eq 'portfolio') {
         # Added fields          # Added fields
           my $curnumadd = $env{'form.numaddedfields'};
           if ($curnumadd eq '') {
               $curnumadd = 1;
           }
         $scrout .= '<h3>'.&mt('Custom Metadata fields').'</h3>';          $scrout .= '<h3>'.&mt('Custom Metadata fields').'</h3>';
         $scrout .= "<table>\n";          $scrout .= "<table>\n";
         $scrout .= '<tr><td>&nbsp;</td><td align="center">'.          $scrout .= '<tr><td>&nbsp;</td><td align="center">'.
                    &mt('Field Name').'</td>'.'<td align="center">'.                     &mt('Field Name').'</td>'.'<td align="center">'.
                    &mt('Field Value(s)').'</td></tr>'.                     &mt('Field Value(s)').'</td></tr>';
                    '<tr><td>'.&mt('1: ').  
                    '</td><td align="center">'.          for (my $j=0; $j<$curnumadd; $j++) {
                    '<input type="text" name="addedfield_0" size="10" /></td>'.  
                    '<td align="center"><input type="text" '.  
                    'name="addedvalues_0" size="15" /></td></tr>';  
         for (my $j=1; $j<=$env{'form.numaddedfields'}; $j++) {  
             my $num = $j+1;              my $num = $j+1;
             $scrout .= '<tr><td>'.&mt('Custom metadata [_1]: ',$num).              $scrout .= '<tr><td>'.&mt('Custom metadata [_1]: ',$num).
                        '</td><td align="center">'.                         '</td><td align="center">'.
                        '<input type="text" name="addedfield_'.$j.                         '<input type="text" name="addedfield_'.$j.
                        '" size="10" /></td>'.                         '" size="10" value="'.$env{'form.addedfield_'.$j}.
                          '" /></td>'.
                        '<td align="center"><input type="text" '.                         '<td align="center"><input type="text" '.
                        'name="addedvalues_'.$j.'" size="15" /></td></tr>';                         'name="addedvalues_'.$j.'" size="15" value="'.
                          $env{'form.addedvalues_'.$j}.'" /></td></tr>';
         }          }
         my $numadded = 1 + $env{'form.numaddedfields'};          $scrout .= '<tr><td align="left" colspan="3"><label>'.
         $scrout .= '<tr><td colspan="3">&nbsp;</td></tr>'.                     '<input type="checkbox" name="newfield" '.
                    '<tr><td align="left" colspan="3">'.                     'value="1" onclick="javascript:additional_metadata()" />'.
                    '<input type="button" name="newfield" '.                     &mt('Another custom field/value pair?').'</label>'.
                    'value="Additional custom field/value" '.                     '<input type="hidden" name="numaddedfields" value="'.
                    'onclick="javascript:additional_metadata()" />'.                     $curnumadd.'" /></td></tr></table>';
                    '<input type="hidden" name="numaddedfelds" value="'.  
                    $numadded.'" /></td></tr></table>';  
     } else {      } else {
         #          #
         # Dynamic metadata          # Dynamic metadata
Line 975  ENDHEADER Line 993  ENDHEADER
                description=>'Network-wide number of accesses (hits)',},                 description=>'Network-wide number of accesses (hits)',},
              { name=>'stdno',               { name=>'stdno',
                description=>                 description=>
                'Total number of students who have worked on this problem',},                 'Statistics calculated for number of students',},
              { name => 'avetries',               { name => 'avetries',
                description=>'Average number of tries till solved',},                 description=>'Average number of tries till solved',},
              { name => 'difficulty',               { name => 'difficulty',
Line 1022  ENDHEADER Line 1040  ENDHEADER
     # Creation/Modification date limits      # Creation/Modification date limits
     $scrout .= '<h3>'.&mt('Creation and Modification dates').'</h3>';      $scrout .= '<h3>'.&mt('Creation and Modification dates').'</h3>';
     $scrout .= "\n<table>\n";      $scrout .= "\n<table>\n";
       $scrout .= "<tr><td>&nbsp;</td><td>".&mt('Month[_1]Day[_2]Year','&nbsp;'x14,'&nbsp;'x6)."</td></tr>\n";
     my $cafter =       my $cafter = 
         &Apache::lonhtmlcommon::date_setter('advsearch',         # formname          &Apache::lonhtmlcommon::date_setter('advsearch',         # formname
                                             'creationdate1', # fieldname                                              'creationdate1', # fieldname
Line 1040  ENDHEADER Line 1059  ENDHEADER
                                             '',          # state                                              '',          # state
                                             1,           # no_hh_mm_ss                                              1,           # no_hh_mm_ss
                                             );                                              );
     $scrout .= &mt('<tr><td align="right">Created between</td>'.      $scrout .= '<tr><td align="right">'.&mt('Created between').'</td>'
                    '<td>[_1]</td></tr>'.                .'<td>'.$cafter.'</td></tr>'
                    '<tr><td align="right">and </td>'.                .'<tr><td align="right">'.&mt('and').'</td>'
                    '<td>[_2]</td></tr>',$cafter,$cbefore);                .'<td>'.$cbefore.'</td></tr>';
     my $lafter =       my $lafter = 
         &Apache::lonhtmlcommon::date_setter('advsearch',          &Apache::lonhtmlcommon::date_setter('advsearch',
                                             'revisiondate1',                                               'revisiondate1', 
Line 1062  ENDHEADER Line 1081  ENDHEADER
                                             '',          # state                                              '',          # state
                                             1,           # no_hh_mm_ss                                              1,           # no_hh_mm_ss
                                             );                                              );
     $scrout .= &mt('<tr><td align="right">Last modified between </td>'.      $scrout .= '<tr><td align="right">'.&mt('Last modified between').'</td>'
                    '<td>[_1]</td></tr>'.                .'<td>'.$lafter.'</td></tr>'
                    '<tr><td align="right">and</td>'.                .'<tr><td align="right">'.&mt('and').'</td>'
                    '<td>[_2]</td></tr>',$lafter,$lbefore);                .'<td>'.$lbefore.'</td></tr>';
     $scrout.="</table>\n";      $scrout.="</table>\n";
     $scrout.=<<ENDDOCUMENT;      $scrout.=<<ENDDOCUMENT;
 $advanced_buttons  $advanced_buttons
Line 1140  Outputs: text for box with view options Line 1159  Outputs: text for box with view options
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################
 sub viewoptions {  sub viewoptions {
     my $scrout;      my $scrout = '<span class="LC_nobreak">';
     if (! defined($env{'form.viewselect'})) {       if (! defined($env{'form.viewselect'})) { 
         $env{'form.viewselect'}='detailed';           $env{'form.viewselect'}='detailed'; 
     }      }
Line 1153  sub viewoptions { Line 1172  sub viewoptions {
                                                   $env{'form.show'},                                                    $env{'form.show'},
                                                   undef,                                                    undef,
                                                   (10,20,50,100,1000,10000));                                                    (10,20,50,100,1000,10000));
     $scrout .= ('&nbsp;'x2).&mt('[_1] Records per Page',$countselect).      $scrout .= ('&nbsp;'x2)
         '</nobr>'.$/;                .&mt('[_1] Records per Page',$countselect)
                 .'</span>'.$/;
     return $scrout;      return $scrout;
 }  }
   
Line 1380  sub parse_advanced_search { Line 1400  sub parse_advanced_search {
    'lastrevisiondatestart_month','lastrevisiondatestart_day',     'lastrevisiondatestart_month','lastrevisiondatestart_day',
    'lastrevisiondatestart_year','lastrevisiondateend_month',     'lastrevisiondatestart_year','lastrevisiondateend_month',
    'lastrevisiondateend_day','lastrevisiondateend_year') {     'lastrevisiondateend_day','lastrevisiondateend_year') {
  $env{'form.'.$field}=~s/[^\w\/\s\(\)\=\-\"\']//g;   $env{'form.'.$field}=~s/[^\w\/\s\(\)\=\-\"\'.\*]//g;
     }      }
     foreach ('mode','form','element') {      foreach ('mode','form','element') {
  # is this required?  Hmmm.   # is this required?  Hmmm.
Line 1413  sub parse_advanced_search { Line 1433  sub parse_advanced_search {
             $fillflag++;              $fillflag++;
         }          }
     }      }
       if ($env{'form.area'} eq 'portfolio') {
           # Added metadata fields
           for (my $i=0; $i<$env{'form.numaddedfields'} ; $i++) {
               my $field = $env{'form.addedfield_'.$i};
               $field =~ s/^\s*(\S*)\s*$/$1/;
               $field =~ s/\W/_/g;
               if ($field ne '') {
                   $fillflag++;
               }
           }
       }
     if (! $fillflag) {      if (! $fillflag) {
  &output_blank_field_error($r,$closebutton,   &output_blank_field_error($r,$closebutton,
                                   'phase=disp_adv',$hidden_fields);                                    'phase=disp_adv',$hidden_fields);
Line 1503  sub parse_advanced_search { Line 1534  sub parse_advanced_search {
         #          #
         # Added metadata fields          # Added metadata fields
         for (my $i=0; $i<$env{'form.numaddedfields'} ; $i++) {          for (my $i=0; $i<$env{'form.numaddedfields'} ; $i++) {
             if (($env{'form.addedfield_'.$i} ne '') &&               my $field = $env{'form.addedfield_'.$i};
                 ($env{'form.addedvalue_'.$i} ne '')) {              $field =~ s/^\s*(\S*)\s*$/$1/;
                 my $stuff = 1; #FIXME               $field =~ s/\W/_/g;
               $field =~ tr/A-Z/a-z/; 
               if ($field ne '') {
                   my $value = $env{'form.addedvalues_'.$i};
                   if ($value ne '') {
                       $value =~ s/'/''/g; #' stupid emacs
                       my ($error,$query) = 
                           &process_phrase_input($value,0,'pf.value');
                       if (!defined($error)) {
                           push(@queries,"pf.field = '$field' AND $query");
                           $pretty_search_string .=
                               $font.$field.'</font>: '.
                               $env{'form.addedvalues_'.$i}.'<br />';
                       }
                   } else {
                       push(@queries,"pf.field = '$field' AND pf.value IS NULL");
                   }
             }              }
         }          }
     } else {      } else {
Line 1598  sub parse_advanced_search { Line 1645  sub parse_advanced_search {
     #      #
     if (@queries) {      if (@queries) {
         if ($env{'form.area'} eq 'portfolio') {          if ($env{'form.area'} eq 'portfolio') {
             $query ="SELECT pm.*,pa.keynum,pa.scope FROM portfolio_metadata pm, portfolio_access pa  WHERE (pm.url = pa.url AND (pa.start < NOW() AND (pa.end IS NULL OR pa.end > NOW())) AND (".join(') AND (',@queries).'))';              $query ="SELECT pm.*,pa.keynum,pa.scope FROM portfolio_metadata pm, portfolio_access pa, portfolio_addedfields pf WHERE (pm.url = pa.url AND pf.url = pm.url AND (pa.start < UTC_TIMESTAMP() AND (pa.end IS NULL OR pa.end > UTC_TIMESTAMP())) AND (".join(') AND (',@queries).'))';
         } else {          } else {
     $query="SELECT * FROM metadata WHERE (".join(") AND (",@queries).')';      $query="SELECT * FROM metadata WHERE (".join(") AND (",@queries).')';
         }          }
Line 1635  sub parse_domain_restrictions { Line 1682  sub parse_domain_restrictions {
         foreach (sort @allowed_domains) {          foreach (sort @allowed_domains) {
             $pretty_domains_string .= "<b>".$_."</b> ";              $pretty_domains_string .= "<b>".$_."</b> ";
         }          }
         foreach (keys(%Apache::lonnet::libserv)) {   my %servers = &Apache::lonnet::get_servers(\@allowed_domains,
             if (exists($domain_hash{$Apache::lonnet::hostdom{$_}})) {     'library');
                 push @$libraries_to_query,$_;   $libraries_to_query = [keys(%servers)];
             }  
         }  
     }      }
     return ($libraries_to_query,      return ($libraries_to_query,
             $pretty_domains_string);              $pretty_domains_string);
Line 1663  sub parse_basic_search { Line 1708  sub parse_basic_search {
     #      #
     # Clean up fields for safety      # Clean up fields for safety
     for my $field ('basicexp') {      for my $field ('basicexp') {
  $env{"form.$field"}=~s/[^\w\s\'\"\!\(\)\-]//g;   $env{"form.$field"}=~s/[^\w\s\'\"\!\(\)\-\*]//g;
     }      }
     foreach ('mode','form','element') {      foreach ('mode','form','element') {
  # is this required?  Hmmm.   # is this required?  Hmmm.
Line 1702  sub parse_basic_search { Line 1747  sub parse_basic_search {
     #}      #}
     my $final_query;      my $final_query;
     if ($env{'form.area'} eq 'portfolio') {      if ($env{'form.area'} eq 'portfolio') {
         $final_query = 'SELECT pm.*,pa.keynum,pa.scope FROM portfolio_metadata pm, portfolio_access pa  WHERE (pm.url = pa.url AND (pa.start < NOW() AND (pa.end IS NULL OR pa.end > NOW())) AND '.join(" AND ",@Queries).')';          $final_query = 'SELECT pm.*,pa.keynum,pa.scope FROM portfolio_metadata pm, portfolio_access pa  WHERE (pm.url = pa.url AND (pa.start < UTC_TIMESTAMP() AND (pa.end IS NULL OR pa.end > UTC_TIMESTAMP())) AND '.join(" AND ",@Queries).')';
     } else {      } else {
         $final_query = 'SELECT * FROM metadata WHERE '.join(" AND ",@Queries);          $final_query = 'SELECT * FROM metadata WHERE '.join(" AND ",@Queries);
     }      }
Line 1818  sub process_phrase_input { Line 1863  sub process_phrase_input {
             $item[1];              $item[1];
         }          }
     term:      term:
         /[\w\Q:!@#$%^&*()+_=|{}<>,.;\\\/?\E]+/ {          /[\w\Q:!@#$%^&*()+_=|{}<>,.;\\\/?\E\-]+/ {
             $item[1];              $item[1];
         }          }
 ENDGRAMMAR  ENDGRAMMAR
Line 2078  sub copyright_check { Line 2123  sub copyright_check {
         ($env{'user.domain'} ne $resdom)) {          ($env{'user.domain'} ne $resdom)) {
         return 0;          return 0;
     }      }
       # Check for custom rights
       if ($Metadata->{'copyright'} eq 'custom') {
          return &Apache::lonnet::customaccess('bre',$Metadata->{'url'});
       }
     return 1;      return 1;
 }  }
   
Line 2106  sub ensure_db_and_table { Line 2155  sub ensure_db_and_table {
     ##      ##
     if (! defined($table) || $table eq '' || $table =~ /\D/ ) {      if (! defined($table) || $table eq '' || $table =~ /\D/ ) {
         $r->print("Unable to retrieve search results.  ".          $r->print("Unable to retrieve search results.  ".
                   "Unable to determine the table results were stored in.  ".                    "Unable to determine the table results were saved in.  ".
   &Apache::loncommon::end_page());    &Apache::loncommon::end_page());
         return undef;          return undef;
     }      }
Line 2116  sub ensure_db_and_table { Line 2165  sub ensure_db_and_table {
     my $connection_result = &Apache::lonmysql::connect_to_db();      my $connection_result = &Apache::lonmysql::connect_to_db();
     if (!defined($connection_result)) {      if (!defined($connection_result)) {
         $r->print("Unable to connect to the MySQL database where your results".          $r->print("Unable to connect to the MySQL database where your results".
                   " are stored.".                    " are saved.".
   &Apache::loncommon::end_page());    &Apache::loncommon::end_page());
         &Apache::lonnet::logthis("lonsearchcat: unable to get lonmysql to".          &Apache::lonnet::logthis("lonsearchcat: unable to get lonmysql to".
                                  " connect to database.");                                   " connect to database.");
Line 2225  END Line 2274  END
 #    }  #    }
 #    $result.="</select>\n";  #    $result.="</select>\n";
     my $revise = &revise_button();      my $revise = &revise_button();
     $result.=<<END;      $result.='<p>'
 <p>              .&mt('There are [_1] matches to your query.',$total_results)
 There are $total_results matches to your query. $revise              .' '.$revise.'</p>'
 </p><p>              .'<p>'.&mt('Search: ').$pretty_query_string
 Search: $pretty_query_string              .'</p></form>';
 </p>  
 </form>  
 END  
     $r->print($result.&Apache::loncommon::end_page());      $r->print($result.&Apache::loncommon::end_page());
     return;      return;
 }  }
Line 2404  Returns: html string for a 'revise searc Line 2450  Returns: html string for a 'revise searc
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################
 sub revise_button {  sub revise_button {
       my $revisetext = &mt('Revise search');
     my $revise_phase = 'disp_basic';      my $revise_phase = 'disp_basic';
     $revise_phase = 'disp_adv' if ($env{'form.searchmode'} eq 'advanced');      $revise_phase = 'disp_adv' if ($env{'form.searchmode'} eq 'advanced');
     my $newloc = '/adm/searchcat'.      my $newloc = '/adm/searchcat'.
         '?persistent_db_id='.$env{'form.persistent_db_id'}.          '?persistent_db_id='.$env{'form.persistent_db_id'}.
             '&cleargroupsort=1'.              '&cleargroupsort=1'.
             '&phase='.$revise_phase;              '&phase='.$revise_phase;
     my $result = qq{<input type="button" value="Revise search" name="revise"} .      my $result = qq{<input type="button" value="$revisetext" name="revise"} .
         qq{ onClick="parent.location='$newloc';" /> };          qq{ onClick="parent.location='$newloc';" /> };
     return $result;      return $result;
 }  }
Line 2448  sub run_search { Line 2495  sub run_search {
     $r->print(<<END);      $r->print(<<END);
 $start_page  $start_page
 $breadcrumbs  $breadcrumbs
 <form name="statusform" action="" method="post">  
 <input type="hidden" name="acts" value="" />  
 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 2460  END Line 2505  END
         pop(@Lines);          pop(@Lines);
     }      }
     if (@Lines > 2) {      if (@Lines > 2) {
         $pretty_string = join '<br />',(@Lines[0..2],'....<br />');          $pretty_string = join '<br />',(@Lines[0..2],'...<br />');
     }      }
     $r->print(&mt("Search: [_1]",$pretty_string));      $r->print(&mt("Search: [_1]",$pretty_string));
     $r->rflush();      $r->rflush();
Line 2474  END Line 2519  END
             @Servers_to_contact = ($serverlist);              @Servers_to_contact = ($serverlist);
         }          }
     } else {      } else {
         @Servers_to_contact = sort(keys(%Apache::lonnet::libserv));   my %all_library_servers = &Apache::lonnet::all_library();
           @Servers_to_contact = sort(keys(%all_library_servers));
     }      }
     my %Server_status;      my %Server_status;
     #      #
     # Check on the mysql table we will use to store results.      # Check on the mysql table we will use to store results.
     my $table =$env{'form.table'};      my $table =$env{'form.table'};
     if (! defined($table) || $table eq '' || $table =~ /\D/ ) {      if (! defined($table) || $table eq '' || $table =~ /\D/ ) {
         $r->print("Unable to determine table id to store search results in.".          $r->print("Unable to determine table id to save search results in.".
                   "The search has been aborted.".                    "The search has been aborted.".
   &Apache::loncommon::end_page());    &Apache::loncommon::end_page());
         return;          return;
Line 2514  END Line 2560  END
     my $server;       my $server; 
     my $status;      my $status;
     my $revise = &revise_button();      my $revise = &revise_button();
     $r->print(<<END);      $r->print('<form name="statusform" action="" method="post">'."\n".
 <table>                '<input type="hidden" name="acts" value="" />'."\n".
 <tr><th>Status</th><th>Total Matches</th><th>Time Remaining</th><th></th></tr>                '<table border="0"><tr><td>'."\n".
 <tr>                &Apache::loncommon::start_data_table());
 <td><input type="text" name="status"  value="" size="50" /></td>      $r->print(&Apache::loncommon::start_data_table_header_row()
 <td><input type="text" name="count"   value="" size="10" /></td>               .'<th>'.&mt('Status').'</th>'
 <td><input type="text" name="seconds" value="" size="8" /></td>               .'<th>'.&mt('Total Matches').'</th>'
 <td>$revise</td>               .'<th>'.&mt('Time Remaining').'</th>'
 </tr>               .&Apache::loncommon::end_data_table_header_row()
 </table>               .&Apache::loncommon::start_data_table_row()
 </form>               .'<td><input type="text" name="status"  value="" size="50" readonly="readonly" /></td>'
 END               .'<td><input type="text" name="count"   value="" size="10" readonly="readonly" /></td>'
                .'<td><input type="text" name="seconds" value="" size="8" readonly="readonly" /></td>'
                .&Apache::loncommon::end_data_table_row()
                .&Apache::loncommon::end_data_table()
                .'</td><td>&nbsp;</td><td>'.$revise.'</td></tr></table></form>');
     $r->rflush();      $r->rflush();
     &reset_timing();      &reset_timing();
     &update_seconds($r);      &update_seconds($r);
Line 2597  END Line 2647  END
                     my %Fields = &parse_raw_result($result,$server,$tabletype);                      my %Fields = &parse_raw_result($result,$server,$tabletype);
                     $Fields{'hostname'} = $server;                      $Fields{'hostname'} = $server;
                     #                      #
                     # Skip if external and we did not want that  
                     next if ((! $env{'form.inclext'}) && ($Fields{'url'}=~/^\/ext\//));  
                     # Skip based on copyright                      # Skip based on copyright
                     next if (! &copyright_check(\%Fields));                      next if (! &copyright_check(\%Fields));
   
Line 2719  sub display_results { Line 2767  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 store import results.</form>'.              $r->print('Unable to save import results.</form>'.
       &Apache::loncommon::end_page());        &Apache::loncommon::end_page());
             $r->rflush();              $r->rflush();
             return;              return;
Line 2852  sub display_results { Line 2900  sub display_results {
     ## Output links (if necessary) for 'prev' and 'next' pages.      ## Output links (if necessary) for 'prev' and 'next' pages.
     $r->print      $r->print
         ('<table width="100%"><tr><td width="25%" align="right">'.          ('<table width="100%"><tr><td width="25%" align="right">'.
          '<nobr>'.$sortform.'</nobr>'.           '<span class="LC_nobreak">'.$sortform.'</span>'.
          '</td><td width="25%" align="right">'.           '</td><td width="25%" align="right">'.
          &prev_next_buttons($min,$env{'form.show'},$total_results).           &prev_next_buttons($min,$env{'form.show'},$total_results).
          '</td><td align="right">'.           '</td><td align="right">'.
Line 2956  sub catalogmode_output { Line 3004  sub catalogmode_output {
         $title=~ s/\'/\\\'/g;          $title=~ s/\'/\\\'/g;
         if ($env{'form.catalogmode'} eq 'interactive') {          if ($env{'form.catalogmode'} eq 'interactive') {
             $output.=<<END               $output.=<<END 
 <font size='-1'><INPUT TYPE="button" NAME="returnvalues" VALUE="SELECT"  <font size='-1'><input type="button" name="returnvalues" value="select"
 onClick="javascript:select_data('$title','$url')">  onClick="javascript:select_data('$title','$url')" />
 </font>  </font>
 END  END
         }          }
Line 2966  END Line 3014  END
         $groupsearch_db{"pre_${fnum}_title"}=$title;          $groupsearch_db{"pre_${fnum}_title"}=$title;
         $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 3193  function changeURL(val) { Line 3241  function changeURL(val) {
 SCRIPT  SCRIPT
         }          }
     }      }
       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">
     function queue(checkbox_num,val) {      function queue(checkbox_num,val) {
Line 3213  SCRIPT Line 3262  SCRIPT
     }      }
     function select_group() {      function select_group() {
  parent.window.location=   parent.window.location=
     "/adm/groupsort?mode=$env{'form.mode'}&catalogmode=import&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>
Line 3336  sub detailed_citation_view { Line 3385  sub detailed_citation_view {
     $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'}).'" />'.'&nbsp;'.
         '<a href="'.$jumpurl.'" '.          '<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";
     $result .= '<b>'.$values{'author'}.'</b>,'.      $result .= '<b>'.$values{'author'}.'</b>,'.
Line 3403  sub detailed_citation_view { Line 3452  sub detailed_citation_view {
         if (exists($field->{'type'}) && $field->{'type'} eq 'list') {          if (exists($field->{'type'}) && $field->{'type'} eq 'list') {
             $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'}})){
                 $result .=                   $item = &Apache::lonnet::clutter($item);
   &Apache::lonhtmlcommon::crumbs(&Apache::lonnet::clutter($item),                  $result .= &display_url($item,[2,0,1]);
   'preview',  
   '',  
   (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),2,0,1);  
             }              }
         } elsif (exists($field->{'format'}) && $field->{'format'} ne ''){          } elsif (exists($field->{'format'}) && $field->{'format'} ne ''){
             $result.= &mt($field->{'translate'},              $result.= &mt($field->{'translate'},
Line 3415  sub detailed_citation_view { Line 3461  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') {
                if ($jumpurl=~/^http\:\/\//) {                  $result .= &display_url($jumpurl,[3,0,1]);
                  $result.='<tt>'.$jumpurl.'</tt>';  
                } else {  
                  $result .=  
   &Apache::lonhtmlcommon::crumbs($jumpurl,  
   'preview',  
   '',  
   (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),3,0,1);  
                }  
             } else {              } else {
                 $result.= &mt($field->{'translate'},                  $result.= &mt($field->{'translate'},
                               $values{$field->{'name'}});                                $values{$field->{'name'}});
Line 3479  sub summary_view { Line 3517  sub summary_view {
         $result .= '&nbsp;'.$tmp.'&nbsp;';          $result .= '&nbsp;'.$tmp.'&nbsp;';
     }      }
     my $jumpurl=$values{'url'};      my $jumpurl=$values{'url'};
     my $link;      $jumpurl=~s|^/ext/|http://|;
     if ($jumpurl=~m|^/ext/|) {      my $link = &display_url($jumpurl,[2,0,1]);
  $jumpurl=~s|^/ext/|http://|;  
  $link='<br /><tt>'.$jumpurl.'</tt>';  
     } else {  
  $link=&Apache::lonhtmlcommon::crumbs($jumpurl,  
   'preview',  
   '',  
   (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),2,0,1);  
     }  
     $result.=<<END;      $result.=<<END;
 <a href="$jumpurl"   <a href="$jumpurl?inhibitmenu=yes" 
    target='preview'>$values{'title'}</a>$link     target='preview'>$values{'title'}</a> <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'}
Line 3524  sub summary_preview { Line 3556  sub summary_preview {
 sub compact_view {  sub compact_view {
     my ($prefix,%values) = @_;      my ($prefix,%values) = @_;
     my $jumpurl=$values{'url'};      my $jumpurl=$values{'url'};
     my $link;      $jumpurl=~s|^/ext/|http://|;
     if ($jumpurl=~m|^/ext/|) {  
  $jumpurl=~s|^/ext/|http://|;      my $link = &display_url($jumpurl,[1,1,1]);
  $link='<tt>'.$jumpurl.'</tt>';      
     } else {  
         $link=&Apache::lonhtmlcommon::crumbs($jumpurl,  
   'preview',  
   '',  
   (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),1,1,1).' ';  
     }  
     my $result =       my $result = 
         $prefix.'<img src="'.&Apache::loncommon::icon($values{'url'}).'">';          $prefix.'<img src="'.&Apache::loncommon::icon($values{'url'}).'">';
     if (exists($env{'form.sortfield'}) &&       if (exists($env{'form.sortfield'}) && 
Line 3542  sub compact_view { Line 3568  sub compact_view {
         if (! defined($tmp)) { $tmp = 'undefined'; }          if (! defined($tmp)) { $tmp = 'undefined'; }
         $result .= '&nbsp;'.$tmp.'&nbsp;';          $result .= '&nbsp;'.$tmp.'&nbsp;';
     }      }
     $result.='&nbsp;<a href="'.$jumpurl.'" target="preview">'.      $jumpurl = &HTML::Entities::encode($jumpurl,'<>&"');
         $values{'title'}.'</a>'.('&nbsp;'x2).$link.      $result.=' <span class="LC_nobreak">'.
         '<b>'.$values{'author'}.'</b> ('.$values{'domain'}.')<br />';   '<a href="'.$jumpurl.'?inhibitmenu=yes" target="preview">'.
           &HTML::Entities::encode($values{'title'},'<>&"').'</a></span> '.
    $link.' <b>'.$values{'author'}.'</b> ('.$values{'domain'}.')<br />';
     return $result;      return $result;
 }  }
   
   sub display_url {
       my ($url,$crumb_args) = @_;
       my $link;
       if ($url=~m|^/ext/|) {
    $url=~s|^/ext/|http://|;
    $link='<span class="LC_filename">'.$url.'</span>';
       } elsif ($url=~m{^(http://|/uploaded/)}) {
    $link='<span class="LC_filename">'.$url.'</span>';
       } else {
           $link=&Apache::lonhtmlcommon::crumbs($url,
     'preview',
     '',
     (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),@{$crumb_args}).' ';
       }
       return $link;
   }
   
 ######################################################################  ######################################################################
 ######################################################################  ######################################################################
Line 3571  sub fielded_format_view { Line 3615  sub fielded_format_view {
 $prefix <img src="$icon" />  $prefix <img src="$icon" />
 <dl>  <dl>
 <dt>URL:</dt>  <dt>URL:</dt>
     <dd><a href="$jumpurl"       <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',

Removed from v.1.278  
changed lines
  Added in v.1.303


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.