--- loncom/interface/lonsearchcat.pm 2008/05/28 22:22:27 1.295 +++ loncom/interface/lonsearchcat.pm 2011/01/17 20:18:02 1.327 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Search Catalog # -# $Id: lonsearchcat.pm,v 1.295 2008/05/28 22:22:27 www Exp $ +# $Id: lonsearchcat.pm,v 1.327 2011/01/17 20:18:02 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -118,8 +118,6 @@ sub handler { # This is set and used in &handler() and is also used in # &output_results(). - my $loaderror=&Apache::lonnet::overloaderror($r); - if ($loaderror) { return $loaderror; } # my $closebutton; # button that closes the search window # This button is different for the RAT compared to @@ -175,25 +173,16 @@ sub handler { if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) { push(@allowed_searches,'res'); } - if (exists($env{'request.course.id'}) && $env{'request.course.id'} ne '') { - push(@allowed_searches,'course'); - } my $crumb_text = 'Portfolio Search'; - if (@allowed_searches == 3) { - $crumb_text = 'Course, Portfolio and Catalog Search'; - } elsif (@allowed_searches ==2) { - if (grep(/^res$/,@allowed_searches)) { - $crumb_text = 'Portfolio and Catalog Search'; - } elsif (grep(/^course$/,@allowed_searches)) { - $crumb_text = 'Portfolio and Course Search'; - } + if (@allowed_searches ==2) { + $crumb_text = 'Portfolio and Catalog Search'; } &Apache::lonhtmlcommon::add_breadcrumb ({href=>'/adm/searchcat?'. &Apache::loncommon::inhibit_menu_check(). - '&catalogmode='.$env{'form.catalogmode'}. - '&launch='.$env{'form.launch'}. - '&mode='.$env{'form.mode'}, + '&catalogmode='.$env{'form.catalogmode'}. + '&launch='.$env{'form.launch'}. + '&mode='.$env{'form.mode'}, text=>"$crumb_text", target=>'_top', bug=>'Searching',}); @@ -266,24 +255,25 @@ sub handler { ## Configure dynamic components of interface ## if ($env{'form.catalogmode'} eq 'interactive') { - $closebutton=" + END } else { $closebutton = ''; @@ -302,8 +292,6 @@ END if ($env{'form.phase'} eq 'adv_search' || $env{'form.phase'} eq 'disp_adv') { $env{'form.searchmode'} = 'advanced'; - } elsif ($env{'form.phase'} eq 'course_search') { - $env{'form.searchmode'} = 'course_search'; } # if ($env{'form.searchmode'} eq 'advanced') { @@ -313,22 +301,13 @@ END } &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'}, + '&phase=disp_adv'. + '&catalogmode='.$env{'form.catalogmode'}. + '&launch='.$env{'form.launch'}. + '&mode='.$env{'form.mode'}, text=>"Advanced $srchtype Search", bug=>'Searching',}); - } elsif ($env{'form.searchmode'} eq 'course 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'}, - text=>"Course Search", - bug=>'Searching',}); - } + } ## ## Switch on the phase ## @@ -350,8 +329,6 @@ END &run_search($r,$query,$customquery,$customshow, $libraries,$pretty_string,$env{'form.area'}); } - } elsif ($env{'form.phase'} eq 'course_search') { - &course_search($r); } elsif(($env{'form.phase'} eq 'basic_search') || ($env{'form.phase'} eq 'adv_search')) { # @@ -447,226 +424,6 @@ sub hidden_field { } ###################################################################### -###################################################################### -## -## Course Search -## -###################################################################### -###################################################################### -{ # Scope the course search to avoid global variables -# -# Variables For course search -my %alreadyseen; -my %hash; -my $totalfound; - -sub make_symb { - my ($id)=@_; - my ($mapid,$resid)=split(/\./,$id); - my $map=$hash{'map_id_'.$mapid}; - my $res=$hash{'src_'.$id}; - my $symb=&Apache::lonnet::encode_symb($map,$resid,$res); - return $symb; -} - -sub course_search { - my $r=shift; - my $pretty_search_string = ''.$env{'form.courseexp'}.''; - my $search_string = $env{'form.courseexp'}; - my @New_Words; - undef(%alreadyseen); - if ($env{'form.crsrelated'}) { - ($search_string,@New_Words) = &related_version($env{'form.courseexp'}); - if (@New_Words) { - $pretty_search_string .= ' '.&mt("with related words").": @New_Words."; - } else { - $pretty_search_string .= ' '.&mt('with no related words')."."; - } - } - my $fulltext=$env{'form.crsfulltext'}; - my $discuss=$env{'form.crsdiscuss'}; - my @allwords=($search_string,@New_Words); - $totalfound=0; - $r->print(&Apache::loncommon::start_page('Course Search'). - '
'. - $pretty_search_string.'
'. - '
'.&mt('Course content').':
'); - $r->rflush(); -# ======================================================= Go through the course - my $c=$r->connection; - if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.".db", - &GDBM_READER(),0640)) { - foreach (sort(keys(%hash))) { - if ($c->aborted()) { last; } - if (($_=~/^src\_(.+)$/)) { - if ($hash{'randomout_'.$1} & !$env{'request.role.adv'}) { - next; - } - my $symb=&make_symb($1); - &checkonthis($r,$1,$hash{$_},0,&Apache::lonnet::gettitle($symb), - $fulltext,$symb,@allwords); - } - } - untie(%hash); - } - unless ($totalfound) { - $r->print('

'.&mt('No matches found in resources').'.

'); - } - -# Check discussions if requested - if ($discuss) { - my $totaldiscussions = 0; - $r->print('

'.&mt('Discussion postings').':
'); - my $navmap = Apache::lonnavmaps::navmap->new(); - my @allres=$navmap->retrieveResources(); - my %discussiontime = &Apache::lonnet::dump('discussiontimes', - $env{'course.'.$env{'request.course.id'}.'.domain'}, - $env{'course.'.$env{'request.course.id'}.'.num'}); - foreach my $resource (@allres) { - my $result = ''; - my $applies = 0; - my $symb = $resource->symb(); - my $ressymb = $symb; - if ($symb =~ m#(___adm/$LONCAPA::domain_re/$LONCAPA::username_re)/(\d+)/bulletinboard$#) { - $ressymb = 'bulletin___'.$2.$1.'/'.$2.'/bulletinboard'; - unless ($ressymb =~ m#bulletin___\d+___adm/wrapper#) { - $ressymb=~s#(bulletin___\d+___)#$1adm/wrapper/#; - } - } - if (defined($discussiontime{$ressymb})) { - my %contrib = &Apache::lonnet::restore($ressymb,$env{'request.course.id'}, - $env{'course.'.$env{'request.course.id'}.'.domain'}, - $env{'course.'.$env{'request.course.id'}.'.num'}); - if ($contrib{'version'}) { - for (my $id=1;$id<=$contrib{'version'};$id++) { - unless (($contrib{'hidden'}=~/\.$id\./) || ($contrib{'deleted'}=~/\.$id\./)) { - if ($contrib{$id.':subject'}) { - $result .= $contrib{$id.':subject'}; - } - if ($contrib{$id.':message'}) { - $result .= $contrib{$id.':message'}; - } - if ($contrib{$id,':attachmenturl'}) { - if ($contrib{$id,':attachmenturl'} =~ m-/([^/]+)$-) { - $result .= $1; - } - } - $applies = &checkwords($result,$applies,@allwords); - } - } - } - } -# Does this discussion apply? - if ($applies) { - my ($map,$ind,$url)=&Apache::lonnet::decode_symb($ressymb); - my $disctype = &mt('resource'); - if ($url =~ m#/bulletinboard$#) { - if ($url =~m#^adm/wrapper/adm/.*/bulletinboard$#) { - $url =~s#^adm/wrapper##; - } - $disctype = &mt('bulletin board'); - } else { - $url = '/res/'.$url; - } - if ($url =~ /\?/) { - $url .= '&symb='; - } else { - $url .= '?symb='; - } - $url .= &escape($resource->symb()); - my $title = $resource->compTitle(); - $r->print('
'. - ($title?$title:$url).'  - '.$disctype.'
'); - $totaldiscussions++; - } else { - $r->print(' .'); - } - } - unless ($totaldiscussions) { - $r->print('

'.&mt('No matches found in postings').'.

'); - } - } - -# =================================================== Done going through course - $r->print(&Apache::loncommon::end_page()); -} - -# =============================== This pulls up a resource and its dependencies - -sub checkonthis { - my ($r,$id,$url,$level,$title,$fulltext,$symb,@allwords)=@_; - $alreadyseen{$id}=1; - if (&Apache::loncommon::connection_aborted($r)) { return; } - $r->rflush(); - - my $result=$title.' '; - if ($env{'request.role.adv'} || !$hash{'encrypted_'.$id}) { - $result.=&Apache::lonnet::metadata($url,'title').' '. - &Apache::lonnet::metadata($url,'subject').' '. - &Apache::lonnet::metadata($url,'abstract').' '. - &Apache::lonnet::metadata($url,'keywords'); - } - my ($extension)=($url=~/\.(\w+)$/); - if (&Apache::loncommon::fileembstyle($extension) eq 'ssi' && - ($url) && ($fulltext)) { - $result.=&Apache::lonnet::ssi_body($url.'?symb='.&escape($symb)); - } - $result=~s/\s+/ /gs; - my $applies = 0; - $applies = &checkwords($result,$applies,@allwords); -# Does this resource apply? - if ($applies) { - $r->print('
'); - for (my $i=0;$i<=$level*5;$i++) { - $r->print(' '); - } - my $href=$url; - if ($hash{'encrypted_'.$id} && !$env{'request.role.adv'}) { - $href=&Apache::lonenc::encrypted($href) - .'?symb='.&Apache::lonenc::encrypted($symb); - } else { - $href.='?symb='.&escape($symb); - } - $r->print(''.($title?$title:$url). - '
'); - $totalfound++; - } elsif ($fulltext) { - $r->print(' .'); - } - $r->rflush(); -# Check also the dependencies of this one - my $dependencies= - &Apache::lonnet::metadata($url,'dependencies'); - foreach (split(/\,/,$dependencies)) { - if (($_=~/^\/res\//) && (!$alreadyseen{$id})) { - &checkonthis($r,$id,$_,$level+1,'',$fulltext,undef,@allwords); - } - } -} - -sub checkwords { - my ($result,$applies,@allwords) = @_; - foreach (@allwords) { - if ($_=~/\w/) { - if ($result=~/$_/si) { - $applies++; - } - } - } - return $applies; -} - -sub untiehash { - if (tied(%hash)) { - untie(%hash); - } -} - -} # End of course search scoping - - -###################################################################### -###################################################################### =pod @@ -684,7 +441,7 @@ sub print_basic_search_form { my $bread_crumb = &Apache::lonhtmlcommon::breadcrumbs('Searching','Search_Basic', $env{'form.catalogmode'} ne 'import'); - my $scrout = &Apache::loncommon::start_page('Search').$bread_crumb; + my $scrout = &Apache::loncommon::start_page('Content Library').$bread_crumb; # Search form for resource space if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) { $scrout .= &setup_basic_search($r,'res',$hidden_fields,$closebutton); @@ -692,52 +449,6 @@ sub print_basic_search_form { } # Search form for accessible portfolio files $scrout.= &setup_basic_search($r,'portfolio',$hidden_fields,$closebutton); - if ($env{'request.course.id'}) { - my %lt=&Apache::lonlocal::texthash('srch' => 'Search', - 'header' => 'Course Search', - 'note' => 'Enter terms or phrases, then press "Search" below', - 'use' => 'use related words', - 'full' =>'fulltext search (time consuming)', - 'disc' => 'search discussion postings (resources and bulletin boards)', - ); - $scrout.=(< -
-
-

$lt{'header'}

- -$hidden_fields -

-$lt{'note'}. -

-

- - - - - -
-ENDCOURSESEARCH - $scrout.=' '. - &Apache::lonhtmlcommon::textbox('courseexp', - $env{'form.courseexp'},40); - my $crscheckbox = - &Apache::lonhtmlcommon::checkbox('crsfulltext', - $env{'form.crsfulltext'}); - my $relcheckbox = - &Apache::lonhtmlcommon::checkbox('crsrelated', - $env{'form.crsrelated'}); - my $discheckbox = - &Apache::lonhtmlcommon::checkbox('crsdiscuss', - $env{'form.crsrelated'}); - $scrout.=(<

-

-
- -ENDENDCOURSE - } $scrout .= &Apache::loncommon::end_page(); $r->print($scrout); return; @@ -751,24 +462,36 @@ sub setup_basic_search { portfolio => 'Portfolio Search', ); my ($userelatedwords,$onlysearchdomain,$inclext,$adv_search_link,$scrout); - $userelatedwords = ''; - $onlysearchdomain = ''; + + $userelatedwords = ''; + + $onlysearchdomain = ''; + $adv_search_link = ''.&mt('Advanced Search').''; # $scrout.='
'; } # - $scrout .= '
'.$/; + $scrout .= '
'.$/; # if ($env{'request.course.id'}) { $scrout .= '

'.$lt{$area}.'

'; # } else { @@ -791,23 +514,27 @@ sub setup_basic_search { &Apache::lonhtmlcommon::textbox('basicexp', $env{'form.basicexp'},50). '
'. - ''.&searchhelp().''.''. - ''. - ''.(' 'x3).$adv_search_link.''.'
'. - ''.(' 'x1).$userelatedwords.''.'
'. - ''.(' 'x1).$onlysearchdomain.''.'
'. - ''.(' 'x1).$inclext.''.'
'. - '
'. - ''.$/; - # - $scrout .= ''. - ''. - ''. - (' 'x2).$closebutton.(' 'x2). &viewoptions(). - ''. - ''.$/; - $scrout .= ''.$/.'
'.'
'; + ''.&searchhelp().''.''. + ''. + ''.(' 'x3).$adv_search_link.''.'
'. + ''.(' 'x1).$userelatedwords.''.'
'. + ''.(' 'x1).$onlysearchdomain.''.'
'. + ''.(' 'x1).$inclext.''.'
'. + ''. + ''. + ''.$/; + # + $scrout .= '

' + .&viewoptions() + .'

' + .'

' + .'' + .' ' + .$closebutton + .'

'; + # + $scrout .= ''.''; return $scrout; } @@ -833,15 +560,18 @@ sub print_advanced_search_form{ 'reset' => 'Reset', 'help' => 'Help'); my $advanced_buttons=<<"END"; +

$closebutton +

END my $srchtype = 'Catalog'; my $jscript; if ($env{'form.area'} eq 'portfolio') { $srchtype = 'Portfolio'; $jscript = ''; } my $scrout= &Apache::loncommon::start_page("Advanced $srchtype Search", $jscript); - $scrout .= <<"ENDHEADER"; -$bread_crumb -
-

-$advanced_buttons -ENDHEADER - $scrout.=(' 'x2).&viewoptions().'

'.$hidden_fields. - ''; + $scrout .= $bread_crumb; + + $scrout .= '' + .$hidden_fields + .''; + + $scrout .= '
'."\n" + .''.&mt('Display Options').''."\n" + .&viewoptions() + .'
'; + + $scrout .= $advanced_buttons; + + $scrout .= &Apache::lonhtmlcommon::start_pick_box(); + my %fields=&Apache::lonmeta::fieldnames(); - # - $scrout .= '

'.&mt("Standard $srchtype Metadata").'

'; - $scrout .= "\n"; - $scrout .= '\n"; + + # Standard Metadata + $scrout .= &Apache::lonhtmlcommon::row_headline() + .'

'.&mt("Standard $srchtype Metadata").'

' + .&searchhelp() + .&Apache::lonhtmlcommon::row_closure(); my %related_word_search = ('title' => 1, 'author' => 0, @@ -878,110 +617,111 @@ ENDHEADER 'abstract' => 1, 'standards'=> 1, 'mime' => 1, - 'subject' => 1, + 'subject' => 1, ); # foreach my $field ('title','author','subject','owner','authorspace', - 'modifyinguser','keywords','notes','abstract', - 'standards','mime') { - $scrout.=''.$/; + $scrout .= &Apache::lonhtmlcommon::row_closure(); } foreach my $field ('lowestgradelevel','highestgradelevel') { - $scrout.=''. - ''. - ''.$/; + 0) + .&Apache::lonhtmlcommon::row_closure(); } - $scrout.=''.$/; - $scrout.=''.$/; - # + + $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('MIME Type Category'))) + .&Apache::loncommon::filecategoryselect('category', + $env{'form.category'}) + .&Apache::lonhtmlcommon::row_closure(); + + $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('Domains'))) + .&Apache::loncommon::domain_select('domains', + $env{'form.domains'},1) + .&Apache::lonhtmlcommon::row_closure(); + # Misc metadata if ($env{'form.area'} ne 'portfolio') { - $scrout.=''.$/; + ) + .&Apache::lonhtmlcommon::row_closure(); } - $scrout.=''; - $scrout .= "
 '. - (' 'x2).&searchhelp()."
'.&titlefield($fields{$field}).''. - &Apache::lonmeta::prettyinput($field, + 'modifyinguser','keywords','notes','abstract', + 'standards','mime') { + $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield($fields{$field})) + .&Apache::lonmeta::prettyinput($field, $env{'form.'.$field}, $field, 'advsearch', - $related_word_search{$field}, - '', + $related_word_search{$field}, + '', $env{'form.'.$field.'_related'}, 50); if ($related_word_search{$field}) { $scrout .= &mt('related words'); } else { - $scrout .= ' '; + $scrout .= ''; } - $scrout .= '
'.&titlefield($fields{$field}).''. - &Apache::lonmeta::prettyinput($field, + $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield($fields{$field})) + .&Apache::lonmeta::prettyinput($field, $env{'form.'.$field}, $field, 'advsearch', - 0). - '
'. - &titlefield(&mt('MIME Type Category')).''. - &Apache::loncommon::filecategoryselect('category', - $env{'form.category'}). - '
'. - &titlefield(&mt('Domains')).''. - &Apache::loncommon::domain_select('domains', - $env{'form.domains'},1). - '
'. - &titlefield(&mt('Copyright/Distribution')). - ''. - &Apache::lonmeta::selectbox('copyright', + $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('Copyright/Distribution'))) + .&Apache::lonmeta::selectbox('copyright', $env{'form.copyright'}, \&Apache::loncommon::copyrightdescription, ( undef, &Apache::loncommon::copyrightids) - ).'
'. - &titlefield(&mt('Language')).''. - &Apache::lonmeta::selectbox('language', + + $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('Language'))) + .&Apache::lonmeta::selectbox('language', $env{'form.language'}, \&Apache::loncommon::languagedescription, ('any',&Apache::loncommon::languageids) - ).'
\n"; - + ) + .&Apache::lonhtmlcommon::row_closure(); + # Portfolio Metadata if ($env{'form.area'} eq 'portfolio') { # Added fields my $curnumadd = $env{'form.numaddedfields'}; if ($curnumadd eq '') { $curnumadd = 1; } - $scrout .= '

'.&mt('Custom Metadata fields').'

'; - $scrout .= "\n"; - $scrout .= ''.''; + $scrout .= &Apache::lonhtmlcommon::row_headline() + .'

'.&mt('Custom Metadata fields').'

' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title('') + .&mt('Field Name').' | '.&mt('Field Value(s)') + .&Apache::lonhtmlcommon::row_closure(); for (my $j=0; $j<$curnumadd; $j++) { my $num = $j+1; - $scrout .= ''. - ''; - } - $scrout .= '
 '. - &mt('Field Name').''. - &mt('Field Value(s)').'
'.&mt('Custom metadata [_1]: ',$num). - ''. - '
'. - '
'; - } else { + $scrout .= &Apache::lonhtmlcommon::row_title(&mt('Custom metadata [_1]',$num)) + .'' + .' ' + .'' + .&Apache::lonhtmlcommon::row_closure(); + } + $scrout .= &Apache::lonhtmlcommon::row_title('') + .'' + .'' + .&Apache::lonhtmlcommon::row_closure(); +} else { # # Dynamic metadata - $scrout .= '

'.&mt('Problem Statistics').'

'; - $scrout .= "\n"; - $scrout .= ''.''."\n"; + $scrout .= &Apache::lonhtmlcommon::row_headline() + .'

'.&mt('Problem Statistics').'

' + .&Apache::lonhtmlcommon::row_closure(); + $scrout .= &Apache::lonhtmlcommon::row_title('') + .&mt('Minimum').' | '.&mt('Maximum') + .&Apache::lonhtmlcommon::row_closure(); foreach my $statistic ({ name=>'count', description=>'Network-wide number of accesses (hits)',}, @@ -994,20 +734,21 @@ ENDHEADER description=>'Degree of difficulty',}, { name => 'disc', description=>'Degree of discrimination'}) { - $scrout .= ''.$/; - } - $scrout .= "
 '. - &mt('Minimum').''. - &mt('Maximum').'
'. - &titlefield(&mt($statistic->{'description'})). - ''. - ''. - '
\n"; - $scrout .= '

'.&mt('Evaluation Data').'

'; - $scrout .= "\n"; - $scrout .= ''.''."\n"; + $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt($statistic->{'description'}))) + .'' + .' ' + .'' + .&Apache::lonhtmlcommon::row_closure(); + } + + $scrout .= &Apache::lonhtmlcommon::row_headline() + .'

'.&mt('Evaluation Data').'

' + .&Apache::lonhtmlcommon::row_closure(); + $scrout .= &Apache::lonhtmlcommon::row_title('') + .&mt('Minimum').' | '.&mt('Maximum') + .&Apache::lonhtmlcommon::row_closure(); foreach my $evaluation ( { name => 'clear', description => 'Material presented in clear way'}, @@ -1019,22 +760,24 @@ ENDHEADER description => 'Material appears to be correct'}, { name => 'technical', description => 'Resource is technically correct'}){ - $scrout .= ''.$/; + $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt($evaluation->{'description'}))) + .'' + .' ' + .'' + .&Apache::lonhtmlcommon::row_closure(); } - $scrout .= "
 '. - &mt('Minimum').''. - &mt('Maximum').'
'. - &titlefield(&mt($evaluation->{'description'})). - ''. - ''. - ''. - '
\n"; } # # Creation/Modification date limits - $scrout .= '

'.&mt('Creation and Modification dates').'

'; - $scrout .= "\n\n"; - $scrout .= "\n"; + $scrout .= &Apache::lonhtmlcommon::row_headline() + .'

'.&mt('Creation and Modification dates').'

' + .&Apache::lonhtmlcommon::row_closure(); + $scrout .= &Apache::lonhtmlcommon::row_title('') + .&mt('Month[_1]Day[_2]Year',' 'x14,' 'x6) + .&Apache::lonhtmlcommon::row_closure(); + my $cafter = &Apache::lonhtmlcommon::date_setter('advsearch', # formname 'creationdate1', # fieldname @@ -1053,10 +796,13 @@ ENDHEADER '', # state 1, # no_hh_mm_ss ); - $scrout .= '' - .'' - .'' - .''; + $scrout .= &Apache::lonhtmlcommon::row_title(&mt('Created between')) + .$cafter + .&Apache::lonhtmlcommon::row_closure(1) + .&Apache::lonhtmlcommon::row_title(&mt('and')) + .$cbefore + .&Apache::lonhtmlcommon::row_closure(); + my $lafter = &Apache::lonhtmlcommon::date_setter('advsearch', 'revisiondate1', @@ -1075,15 +821,18 @@ ENDHEADER '', # state 1, # no_hh_mm_ss ); - $scrout .= '' - .'' - .'' - .''; - $scrout.="
 ".&mt('Month[_1]Day[_2]Year',' 'x14,' 'x6)."
'.&mt('Created between').''.$cafter.'
'.&mt('and').''.$cbefore.'
'.&mt('Last modified between').''.$lafter.'
'.&mt('and').''.$lbefore.'
\n"; - $scrout.=< -ENDDOCUMENT + $scrout .= &Apache::lonhtmlcommon::row_title(&mt('Last modified between')) + .$lafter + .&Apache::lonhtmlcommon::row_closure(1) + .&Apache::lonhtmlcommon::row_title(&mt('and')) + .$lbefore + .&Apache::lonhtmlcommon::row_closure(1); # Last row of total pick_box + + $scrout .= &Apache::lonhtmlcommon::end_pick_box(); + + $scrout .= $advanced_buttons + .''; + $scrout .= &Apache::loncommon::end_page(); $r->print($scrout); return; @@ -1157,17 +906,20 @@ sub viewoptions { if (! defined($env{'form.viewselect'})) { $env{'form.viewselect'}='detailed'; } - $scrout.=&Apache::lonmeta::selectbox('viewselect', - $env{'form.viewselect'}, - \&viewoptiontext, - sort(keys(%Views))); - $scrout.= '  '; + $scrout .= '' + .&mt('Type:').' ' + .&Apache::lonmeta::selectbox('viewselect', + $env{'form.viewselect'}, + \&viewoptiontext, + sort(keys(%Views))) + .''; my $countselect = &Apache::lonmeta::selectbox('show', $env{'form.show'}, undef, (10,20,50,100,1000,10000)); - $scrout .= (' 'x2).&mt('[_1] Records per Page',$countselect). - ''.$/; + $scrout .= ' ' + .&mt('Records per Page:').' '.$countselect + .''.$/; return $scrout; } @@ -1393,7 +1145,7 @@ sub parse_advanced_search { 'lastrevisiondatestart_month','lastrevisiondatestart_day', 'lastrevisiondatestart_year','lastrevisiondateend_month', 'lastrevisiondateend_day','lastrevisiondateend_year') { - $env{'form.'.$field}=~s/[^\w\/\s\(\)\=\-\"\'.]//g; + $env{'form.'.$field}=~s/[^\w\/\s\(\)\=\-\"\'.\*]//g; } foreach ('mode','form','element') { # is this required? Hmmm. @@ -1638,7 +1390,7 @@ sub parse_advanced_search { # if (@queries) { if ($env{'form.area'} eq 'portfolio') { - $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 < 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 { $query="SELECT * FROM metadata WHERE (".join(") AND (",@queries).')'; } @@ -1675,7 +1427,7 @@ sub parse_domain_restrictions { foreach (sort @allowed_domains) { $pretty_domains_string .= "".$_." "; } - my %servers = &Apache::lonnet::get_servers(\@allowed_domains, + my %servers = &Apache::lonnet::get_unique_servers(\@allowed_domains, 'library'); $libraries_to_query = [keys(%servers)]; } @@ -1701,7 +1453,7 @@ sub parse_basic_search { # # Clean up fields for safety for my $field ('basicexp') { - $env{"form.$field"}=~s/[^\w\s\'\"\!\(\)\-]//g; + $env{"form.$field"}=~s/[^\w\s\'\"\!\(\)\-\*]//g; } foreach ('mode','form','element') { # is this required? Hmmm. @@ -1740,7 +1492,7 @@ sub parse_basic_search { #} my $final_query; 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 { $final_query = 'SELECT * FROM metadata WHERE '.join(" AND ",@Queries); } @@ -2118,7 +1870,7 @@ sub copyright_check { } # Check for custom rights if ($Metadata->{'copyright'} eq 'custom') { - return &Apache::lonnet::customacccess('bre',$Metadata->{'url'}); + return &Apache::lonnet::customaccess('bre',$Metadata->{'url'}); } return 1; } @@ -2147,9 +1899,13 @@ sub ensure_db_and_table { ## Sanity check the table id. ## if (! defined($table) || $table eq '' || $table =~ /\D/ ) { - $r->print("Unable to retrieve search results. ". - "Unable to determine the table results were saved in. ". - &Apache::loncommon::end_page()); + $r->print(&Apache::loncommon::start_page(&mt('Error')) +. '

table: |'.$table.'|

' # SB + .'

' + .&mt('Unable to retrieve search results. ' + .'Unable to determine the table results were saved in.') + .&Apache::loncommon::end_page() + ); return undef; } ## @@ -2231,6 +1987,7 @@ sub print_sort_form { } my $js =< +// END - my $start_page = &Apache::loncommon::start_page('Results',$js, - {'no_title' => 1}); + my $start_page = &Apache::loncommon::start_page('Results',$js); my $breadcrumbs= &Apache::lonhtmlcommon::breadcrumbs('Searching','Searching', $env{'form.catalogmode'} ne 'import'); @@ -2381,16 +2138,28 @@ Returns: Nothing. sub update_count_status { my ($r,$text) = @_; $text =~ s/\'/\\\'/g; - $r->print - ("\n"); + $r->print(< +// + +SCRIPT + $r->rflush(); } sub update_status { my ($r,$text) = @_; $text =~ s/\'/\\\'/g; - $r->print - ("\n"); + $r->print(< +// + +SCRIPT + $r->rflush(); } @@ -2417,9 +2186,14 @@ sub update_seconds { my ($r) = @_; my $time = &time_left(); if (($last_time-$time) > 0) { - $r->print("\n"); + $r->print(< +// + +SCRIPT + $r->rflush(); } $last_time = $time; @@ -2448,10 +2222,10 @@ sub revise_button { $revise_phase = 'disp_adv' if ($env{'form.searchmode'} eq 'advanced'); my $newloc = '/adm/searchcat'. '?persistent_db_id='.$env{'form.persistent_db_id'}. - '&cleargroupsort=1'. - '&phase='.$revise_phase; + '&cleargroupsort=1'. + '&phase='.$revise_phase; my $result = qq{ }; + qq{ onclick="parent.location='$newloc';" /> }; return $result; } @@ -2480,16 +2254,13 @@ sub run_search { # # Print run_search header # - my $start_page = &Apache::loncommon::start_page('Search Status',undef, - {'no_title' => 1}); + my $start_page = &Apache::loncommon::start_page('Search Status',undef); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Searching','Searching', $env{'form.catalogmode'} ne 'import'); $r->print(< - END # Remove leading and trailing
$pretty_string =~ s:^\s*
::i; @@ -2500,7 +2271,7 @@ END pop(@Lines); } if (@Lines > 2) { - $pretty_string = join '
',(@Lines[0..2],'....
'); + $pretty_string = join '
',(@Lines[0..2],'...
'); } $r->print(&mt("Search: [_1]",$pretty_string)); $r->rflush(); @@ -2514,7 +2285,7 @@ END @Servers_to_contact = ($serverlist); } } else { - my %all_library_servers = &Apache::lonnet::all_library(); + my %all_library_servers = &Apache::lonnet::unique_library(); @Servers_to_contact = sort(keys(%all_library_servers)); } my %Server_status; @@ -2555,18 +2326,22 @@ END my $server; my $status; my $revise = &revise_button(); - $r->print(< -StatusTotal MatchesTime Remaining - - - - -$revise - - - -END + $r->print('

'."\n". + ''."\n". + '' + .'' + .'' + .&Apache::loncommon::end_data_table_header_row() + .&Apache::loncommon::start_data_table_row() + .'' + .'' + .'' + .&Apache::loncommon::end_data_table_row() + .&Apache::loncommon::end_data_table() + .'
'."\n". + &Apache::loncommon::start_data_table()); + $r->print(&Apache::loncommon::start_data_table_header_row() + .''.&mt('Status').''.&mt('Total Matches').''.&mt('Time Remaining').' '.$revise.'
'); $r->rflush(); &reset_timing(); &update_seconds($r); @@ -2671,7 +2446,7 @@ END last if ($connection->aborted()); &update_seconds($r); } - &update_status($r,&mt('Search Complete [_1]',$server)); + &update_status($r,&mt('Search Complete on Server [_1]',$server)); &update_seconds($r); # &Apache::lonmysql::disconnect_from_db(); # This is unneccessary @@ -2681,11 +2456,11 @@ END # loaded from /adm/searchcat $r->print(&Apache::loncommon::end_page()); # if ($env{'form.catalogmode'} ne 'import') { - $r->print(""); + $r->print(< +window.location='/adm/searchcat?phase=sort&persistent_db_id=$env{'form.persistent_db_id'}'; + +SCRIPT # } return; } @@ -2708,15 +2483,15 @@ sub prev_next_buttons { return '' if ($show eq 'all'); # No links if you get them all at once. # # Create buttons - my $buttons = ''; - $buttons .= ' 'x3; - $buttons .= '' + .'' + .' ' + .'' + .' ' + .'' + .'

'; } ###################################################################### @@ -2741,7 +2516,9 @@ sub display_results { ## my $viewfunction = $Views{$env{'form.viewselect'}}; if (!defined($viewfunction)) { - $r->print("Internal Error - Bad view selected.\n"); + $r->print('

' + .&mt('Internal Error - Bad view selected.') + .'

'."\n"); $r->rflush(); return; } @@ -2758,7 +2535,10 @@ sub display_results { if ($env{'form.catalogmode'} eq 'import') { if (! tie(%groupsearch_db,'GDBM_File',$diropendb, &GDBM_WRCREAT(),0640)) { - $r->print('Unable to save import results.'. + $r->print('

'. + &mt('Unable to save import results.'). + '

'. + ''. &Apache::loncommon::end_page()); $r->rflush(); return; @@ -2772,7 +2552,10 @@ sub display_results { ## Get the number of results my $total_results = &Apache::lonmysql::number_of_rows($table); if (! defined($total_results)) { - $r->print("A MySQL error has occurred.". + $r->print('

'. + &mt('A MySQL error has occurred.'). + '

'. + ''. &Apache::loncommon::end_page()); &Apache::lonnet::logthis("lonmysql was unable to determine the number". " of rows in table ".$table); @@ -2877,37 +2660,40 @@ sub display_results { $env{'form.sortorder'}='asc'; } } - my $sortform = &mt('Sort by [_1] [_2]', - &Apache::loncommon::select_form($env{'form.sortfield'}, + my $sortform = '' + .&mt('Sort by:').' ' + .&Apache::loncommon::select_form($env{'form.sortfield'}, 'sortfield', - %sort_fields), - &Apache::loncommon::select_form($env{'form.sortorder'}, + \%sort_fields) + .' ' + .&Apache::loncommon::select_form($env{'form.sortorder'}, 'sortorder', - (asc =>&mt('Ascending'), + {asc =>&mt('Ascending'), desc=>&mt('Descending') - )) - ); + }) + .''; ## - ## Output links (if necessary) for 'prev' and 'next' pages. - $r->print - ('
'. - ''.$sortform.''. - ''. - &prev_next_buttons($min,$env{'form.show'},$total_results). - ''. - &viewoptions().'
' - ); + ## Display links for 'prev' and 'next' pages (if necessary) and Display Options + $r->print('
'."\n" + .''.&mt('Display Options').''."\n" + .$sortform + .' ' + .&viewoptions() + .'
' + .&prev_next_buttons($min,$env{'form.show'},$total_results) + ); + if ($total_results == 0) { $r->print(''. - '

'.&mt('There are currently no results').'.

'. + '

'.&mt('There are currently no results.').'

'. "". &Apache::loncommon::end_page()); return; } else { - $r->print('
'. + $r->print('
'. mt('Results [_1] to [_2] out of [_3]', $min,$max,$total_results). - "
\n"); + "\n"); } ## ## Get results from MySQL table @@ -2937,13 +2723,14 @@ sub display_results { if ($area eq 'portfolio') { $tabletype = 'portfolio_search'; } + $r->print(&Apache::loncommon::start_data_table()); foreach my $row (@Results) { if ($connection->aborted()) { &cleanup(); return; } my %Fields = %{&parse_row($tabletype,@$row)}; - my $output="

\n"; + my $output; if (! defined($Fields{'title'}) || $Fields{'title'} eq '') { $Fields{'title'} = 'Untitled'; } @@ -2952,21 +2739,27 @@ sub display_results { # Render the result into html $output.= &$viewfunction($prefix,%Fields); # Print them out as they come in. - $r->print($output); + $r->print(&Apache::loncommon::start_data_table_row() + .'' + .$output + .'' + .&Apache::loncommon::end_data_table_row() + ); $r->rflush(); } + $r->print(&Apache::loncommon::end_data_table()); if (@Results < 1) { - $r->print(&mt("There were no results matching your query")); + $r->print('

' + .&mt('There were no results matching your query.') + .'

'); } else { - $r->print - ('
'. - &prev_next_buttons($min,$env{'form.show'},$total_results, + $r->print( + &prev_next_buttons($min,$env{'form.show'},$total_results, "table=".$env{'form.table'}. - "&phase=results". - "&persistent_db_id=". + "&phase=results". + "&persistent_db_id=". $env{'form.persistent_db_id'}) - ."
\n" - ); + ); } $r->print("".&Apache::loncommon::end_page()); $r->rflush(); @@ -2996,7 +2789,7 @@ sub catalogmode_output { if ($env{'form.catalogmode'} eq 'interactive') { $output.=< +onclick="javascript:select_data('$title','$url')" /> END } @@ -3006,7 +2799,7 @@ END $output.=< +onclick="javascript:queue($checkbox_num,$fnum)" /> END } @@ -3175,6 +2968,7 @@ sub search_results_header { if (! exists($env{'form.mode'}) || $env{'form.mode'} ne 'edit') { $js.=< +// SCRIPT } elsif ($env{'form.mode'} eq 'edit') { @@ -3214,6 +3009,7 @@ END $js.=< +// SCRIPT } @@ -3235,6 +3032,7 @@ SCRIPT my $inhibit_menu = "&".&Apache::loncommon::inhibit_menu_check(); $js.=< +SCRIPT + + # HTML-Markup for 'Set a link for this resource to wishlist' + # this is written via JavaScript document.write (function set_wishlistlink) + # it is split into 3 parts and the inputfields for title and path are left out + # these fields are inserted later to set the values for title and path + # automatically via JavaScript (document.title and location.pathname) + my %folders = &Apache::lonnet::get('wishlist',['folders']); + if ($folders{'folders'} eq '') { + $folders{'folders'} = ''; + } + my $start_page_wishlistlink = + &Apache::loncommon::start_page('Set link to wishlist',undef, + {'only_body' => 1, + 'js_ready' => 1, + 'bgcolor' => '#FFFFFF',}); + + my $warningLink = &mt('You must insert a title!'); + + my $in_page_wishlistlink1 = '

'.&mt('Set a link to wishlist').'

'. + '
'. + &Apache::lonhtmlcommon::start_pick_box(). + &Apache::lonhtmlcommon::row_title(&mt('Link Title')); + + my $in_page_wishlistlink2 = &Apache::lonhtmlcommon::row_closure(). + &Apache::lonhtmlcommon::row_title(&mt('Path')); + + my $in_page_wishlistlink3 = &Apache::lonhtmlcommon::row_closure(). + &Apache::lonhtmlcommon::row_title(&mt('Note')). + ''. + &Apache::lonhtmlcommon::row_closure(1). + &Apache::lonhtmlcommon::end_pick_box(). + '

'. + ''. + ''. + ''. + '
'; + + # remove all \n for inserting on javascript document.write + $in_page_wishlistlink1 =~ s/\n//g; + $in_page_wishlistlink2 =~ s/\n//g; + $in_page_wishlistlink3 =~ s/\n//g; + + my $end_page_wishlistlink = + &Apache::loncommon::end_page({'js_ready' => 1}); + + # Add JavaScript-function to set link for a ressource to wishlist + $js.=< +// ' + +'function newlinksubmit(){' + +'var title = document.getElementsByName("title")[0].value;' + +'if (!title) {' + +'alert("$warningLink");' + +'return false;}' + +'return true;}' + +'<\/scr'+'ipt>' + +'$in_page_wishlistlink1' + +'' + +'$in_page_wishlistlink2' + +'' + +'$in_page_wishlistlink3' + +'$end_page_wishlistlink' ); + wishlistlink.document.close(); +} + +// ]]> SCRIPT @@ -3270,10 +3152,10 @@ END } sub results_link { - my $basic_link = "/adm/searchcat?"."&table=".$env{'form.table'}. - "&persistent_db_id=".$env{'form.persistent_db_id'}; - my $results_link = $basic_link."&phase=results". - "&pause=1"."&start=1"; + my $basic_link = "/adm/searchcat?"."&table=".$env{'form.table'}. + "&persistent_db_id=".$env{'form.persistent_db_id'}; + my $results_link = $basic_link."&phase=results". + "&pause=1"."&start=1"; return $results_link; } @@ -3281,14 +3163,16 @@ sub results_link { ###################################################################### sub print_frames_interface { my $r = shift; - my $basic_link = "/adm/searchcat?"."&table=".$env{'form.table'}. - "&persistent_db_id=".$env{'form.persistent_db_id'}; - my $run_search_link = $basic_link."&phase=run_search"; + my $basic_link = "/adm/searchcat?"."&table=".$env{'form.table'}. + "&persistent_db_id=".$env{'form.persistent_db_id'}; + my $run_search_link = $basic_link."&phase=run_search"; my $results_link = &results_link(); my $js = < +// JS @@ -3375,9 +3259,13 @@ sub detailed_citation_view { my $jumpurl=$values{'url'}; $jumpurl=~s|^/ext/|http://|; $result .= ''.$prefix. - ''.' '. + ''.' '. ''.$values{'title'}."\n"; + 'target="preview">'.$values{'title'}."\n". + ''. + ''; $result .= "

\n"; $result .= ''.$values{'author'}.','. ' '.$values{'owner'}.'
'; @@ -3444,7 +3332,7 @@ sub detailed_citation_view { $result .= ''.&mt($field->{'translate'}).''; foreach my $item (split(',',$values{$field->{'name'}})){ $item = &Apache::lonnet::clutter($item); - $result .= &display_url($item,[2,0,1]); + $result .= '
'.&display_url($item,1).'
'; } } elsif (exists($field->{'format'}) && $field->{'format'} ne ''){ $result.= &mt($field->{'translate'}, @@ -3452,7 +3340,7 @@ sub detailed_citation_view { $values{$field->{'name'}}))."
\n"; } else { if ($field->{'special'} eq 'url link') { - $result .= &display_url($jumpurl,[3,0,1]); + $result .= '
'.&display_url($jumpurl,1).'
'; } else { $result.= &mt($field->{'translate'}, $values{$field->{'name'}}); @@ -3467,17 +3355,14 @@ sub detailed_citation_view { if (exists($values{'shortabstract'}) && $values{'shortabstract'} ne '') { $result .= '

'.$values{'shortabstract'}.'

'; } - $result .= '
'."\n"; return $result; } sub detailed_citation_preview { my ($prefix,%values)=@_; - return '
'. - &detailed_citation_view($prefix,%values). + return &detailed_citation_view($prefix,%values). ''. - &Apache::lonindexer::showpreview($values{'url'}). - '

'; + &Apache::lonindexer::showpreview($values{'url'}); } @@ -3494,7 +3379,7 @@ sub detailed_citation_preview { sub summary_view { my ($prefix,%values) = @_; my $icon=&Apache::loncommon::icon($values{'url'}); - my $result=qq{$prefix}; + my $result=qq{$prefix}; if (exists($env{'form.sortfield'}) && $env{'form.sortfield'} !~ /^(default| author| @@ -3509,28 +3394,31 @@ sub summary_view { } my $jumpurl=$values{'url'}; $jumpurl=~s|^/ext/|http://|; - my $link = &display_url($jumpurl,[2,0,1]); + my $link = '
'.&display_url($jumpurl,1).'
'; + my $titleWL = &mt('Set link to wishlist'); $result.=<$values{'title'}
-$link
+ target="preview">$values{'title'} + + set wishlistlink + +
+$link
$values{'author'}, $values{'owner'} -- $values{'lastrevisiondate'}
$values{'copyrighttag'}
$values{'extrashow'} -

-
END return $result; } sub summary_preview { my ($prefix,%values)=@_; - return '
'. - &summary_view($prefix,%values). + return &summary_view($prefix,%values). ''. - &Apache::lonindexer::showpreview($values{'url'}). - '

'; + &Apache::lonindexer::showpreview($values{'url'}); } ###################################################################### @@ -3549,10 +3437,10 @@ sub compact_view { my $jumpurl=$values{'url'}; $jumpurl=~s|^/ext/|http://|; - my $link = &display_url($jumpurl,[1,1,1]); + my $link = &display_url($jumpurl,1); my $result = - $prefix.''; + $prefix.''; if (exists($env{'form.sortfield'}) && $env{'form.sortfield'} !~ /^(default|author|url|title)$/) { my $tmp = $values{$env{'form.sortfield'}}; @@ -3563,12 +3451,17 @@ sub compact_view { $result.=' '. ''. &HTML::Entities::encode($values{'title'},'<>&"').' '. - $link.' '.$values{'author'}.' ('.$values{'domain'}.')
'; + ''. + ''. + ''. + $link.' '.$values{'author'}.' ('.$values{'domain'}.')'; return $result; } sub display_url { - my ($url,$crumb_args) = @_; + my ($url,$skiplast) = @_; my $link; if ($url=~m|^/ext/|) { $url=~s|^/ext/|http://|; @@ -3576,10 +3469,12 @@ sub display_url { } elsif ($url=~m{^(http://|/uploaded/)}) { $link=''.$url.''; } else { - $link=&Apache::lonhtmlcommon::crumbs($url, - 'preview', - '', - (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),@{$crumb_args}).' '; + $link=&Apache::lonhtmlcommon::crumbs( + $url, + 'preview', + '', + (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''), + $skiplast).' '; } return $link; } @@ -3602,12 +3497,19 @@ sub fielded_format_view { my $jumpurl=$values{'url'}; $jumpurl=~s|^/ext/|http://|; + my $titleWL = ('Set link to wishlist'); my $result=< +$prefix
URL:
$values{'url'}
+ target='preview'>$values{'url'} + + set wishlistlink + + END foreach my $field ('title','author','domain','subject','keywords','notes', 'mimetag','language','creationdate','lastrevisiondate', @@ -3629,7 +3531,6 @@ END } $result .= "
\n"; $result .= $values{'extrashow'}; - $result .= '
'."\n"; return $result; } @@ -3703,7 +3604,6 @@ $prefix $xml $values{'extrashow'} -
END return $result; } @@ -3743,9 +3643,12 @@ sub output_unparsed_phrase_error { my ($r,$closebutton,$parms,$hidden_fields,$field)=@_; my $errorstring; if ($field eq 'basicexp') { - $errorstring = &mt('Unable to understand the search phrase [_1]. Please modify your search.',$env{'form.basicexp'}); + $errorstring = &mt('Unable to understand the search phrase [_1]. Please modify your search.' + ,''.$env{'form.basicexp'}.''); } else { - $errorstring = &mt('Unable to understand the search phrase [_1]:[_2].',$field,$env{'form.'.$field}); + $errorstring = &mt('Unable to understand the search phrase [_1]: [_2]' + ,''.$field.'' + ,$env{'form.'.$field}); } my $heading = &mt('Unparsed Field'); my $revise = &mt('Revise search request'); @@ -3759,11 +3662,11 @@ $hidden_fields $closebutton

$heading

-

+

$errorstring

-$revise +$revise

$end_page ENDPAGE @@ -3791,23 +3694,32 @@ $parms is extra information to include i ###################################################################### sub output_blank_field_error { my ($r,$closebutton,$parms,$hidden_fields)=@_; - my $errormsg = &mt('You did not fill in enough information for the search to be started. You need to fill in relevant fields on the search page in order for a query to be processed.'); + my $errormsg = &mt('You did not fill in enough information for the search to be started. You need to fill in relevant fields on the search page in order for a query to be processed.'); my $revise = &mt('Revise Search Request'); - my $heading = &mt('Unactionable Search Queary'); + my $heading = &mt('Unactionable Search Query'); my $start_page = &Apache::loncommon::start_page('Search'); my $end_page = &Apache::loncommon::end_page(); + if ($closebutton) { + $closebutton = '

'.$closebutton.'


'; + } else { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>'', + text=>$heading,}); + $start_page .= &Apache::lonhtmlcommon::breadcrumbs(); + } + $r->print(< $hidden_fields $closebutton -
+

$heading

-

+

$errormsg

-$revise  +$revise

$end_page ENDPAGE @@ -3838,16 +3750,18 @@ sub output_date_error { # make query information persistent to allow for subsequent revision my $start_page = &Apache::loncommon::start_page('Search'); my $end_page = &Apache::loncommon::end_page(); + my $heading = &mt('Error'); $r->print(< $hidden_fields +onclick='this.form.submit();' /> $closebutton +
-

Error

-

+

$heading

+

$message

$end_page