From 5bb19c6c4db4b84b474c40860920b3fd7de36bdf Mon Sep 17 00:00:00 2001 From: KennethLavrsen Date: Wed, 3 Jun 2009 23:18:38 +0000 Subject: [PATCH] Item1682: SEARCH does not work well with format being blank Now it does git-svn-id: http://svn.foswiki.org/branches/Release01x00@4025 0b4bb1d4-4e5a-0410-9cc4-b2b747904278 --- UnitTestContrib/test/unit/Fn_SEARCH.pm | 11 +++++++++++ core/lib/Foswiki/Search.pm | 27 +++++++++++++------------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/UnitTestContrib/test/unit/Fn_SEARCH.pm b/UnitTestContrib/test/unit/Fn_SEARCH.pm index af9a5cc025..caa4f33fa6 100644 --- a/UnitTestContrib/test/unit/Fn_SEARCH.pm +++ b/UnitTestContrib/test/unit/Fn_SEARCH.pm @@ -252,6 +252,17 @@ sub verify_multiple_and_footer_with_ntopics_and_nhits { $result ); } +sub verify_footer_with_ntopics_empty_format { + my $this = shift; + + my $result = $this->{twiki}->handleCommonTags( +'%SEARCH{"name~\'*Topic\'" type="query" nonoise="on" footer="Total found: $ntopics" format="" separator=""}%', + $this->{test_web}, $this->{test_topic} + ); + + $this->assert_str_equals( "Total found: 3", $result ); +} + sub verify_regex_match { my $this = shift; diff --git a/core/lib/Foswiki/Search.pm b/core/lib/Foswiki/Search.pm index 1b7e65fe90..710f22b948 100644 --- a/core/lib/Foswiki/Search.pm +++ b/core/lib/Foswiki/Search.pm @@ -363,7 +363,8 @@ sub searchWeb { my $caseSensitive = Foswiki::isTrue( $params{casesensitive} ); my $excludeTopic = $params{excludetopic} || ''; my $doExpandVars = Foswiki::isTrue( $params{expandvariables} ); - my $format = defined $params{format} ? $params{format} : ''; + my $formatDefined = defined $params{format}; + my $format = $params{format}; my $header = $params{header}; my $footer = $params{footer}; my $inline = $params{inline}; @@ -377,11 +378,11 @@ sub searchWeb { # now deprecated option 'inline' is used combined with 'format' my $noHeader = !defined($header) && Foswiki::isTrue( $params{noheader}, $nonoise ) - || ( !$header && $format && $inline ); + || ( !$header && $formatDefined && $inline ); my $noFooter = !defined($footer) && Foswiki::isTrue( $params{nofooter}, $nonoise ) - || ( !$footer && $format && $inline ); + || ( !$footer && $formatDefined && $inline ); my $noSearch = Foswiki::isTrue( $params{nosearch}, $nonoise ); my $noSummary = Foswiki::isTrue( $params{nosummary}, $nonoise ); @@ -504,14 +505,14 @@ sub searchWeb { my $originalSearch = $searchString; my $spacedTopic; - if ($format) { + if ( $formatDefined ) { $template = 'searchformat'; } - elsif ($template) { + elsif ( $template ) { # template definition overrides book and rename views } - elsif ($doBookView) { + elsif ( $doBookView ) { $template = 'searchbookview'; } else { @@ -807,7 +808,7 @@ sub searchWeb { my ( $meta, $text ); # Special handling for format='...' - if ($format) { + if ( $formatDefined ) { ( $meta, $text ) = _getTextAndMeta( $this, $topicInfo, $web, $topic ); @@ -853,7 +854,7 @@ sub searchWeb { $wikiusername = "$Foswiki::cfg{UsersWebName}.UnknownUser" unless defined $wikiusername; - if ($format) { + if ( $formatDefined ) { $out = $format; $out =~ s/\$web/$web/gs; $out =~ s/\$topic\(([^\)]*)\)/Foswiki::Render::breakName( @@ -933,7 +934,7 @@ sub searchWeb { $out =~ s/%TEXTHEAD%/$text/go; } - elsif ($format) { + elsif ( $formatDefined ) { $out =~ s/\$summary(?:\(([^\)]*)\))?/$renderer->makeTopicSummary( $text, $topic, $web, $1 )/ges; $out =~ @@ -1006,8 +1007,8 @@ s/\$pattern\((.*?\s*\.\*)\)/_extractPattern( $text, $1 )/ges; } } - #don't expand if a format is specified - it breaks tables and stuff - unless ($format) { + # don't expand if a format is specified - it breaks tables and stuff + unless ( $formatDefined ) { $out = $renderer->getRenderedVersion( $out, $web, $topic ); } @@ -1036,7 +1037,7 @@ s/\$pattern\((.*?\s*\.\*)\)/_extractPattern( $text, $1 )/ges; $afterText =~ s/\$nhits/$nhits/gs; $afterText = $session->handleCommonTags( $afterText, $web, $homeTopic ); - if ( $inline || $format ) { + if ( $inline || $formatDefined ) { $afterText =~ s/\n$//os; # remove trailing new line } @@ -1072,7 +1073,7 @@ s/\$pattern\((.*?\s*\.\*)\)/_extractPattern( $text, $1 )/ges; } # end of: foreach my $web ( @webs ) return '' if ( $ttopics == 0 && $zeroResults ); - if ( $format && !$finalTerm ) { + if ( $formatDefined && !$finalTerm ) { if ($separator) { $separator = quotemeta($separator); $searchResult =~ s/$separator$//s; # remove separator at end