The details for this issue are discussed at
TWiki:Codev.SearchByCreateDate
.
A first patch is attached to that topic too. ATM it is not well tested but deployed on my site.
Missing are patched to the TWiki User documentation, but this is rather easy. If I get green light, then I can write it too, of course.
Ok, here is the patch:
--- lib/TWiki/Search.pm.orig 2006-03-31 13:53:54.000000000 +0200
+++ lib/TWiki/Search.pm 2006-03-31 17:27:15.000000000 +0200
@@ -401,6 +401,7 @@
my $type = $params{type} || '';
my $webName = $params{web} || '';
my $date = $params{date} || '';
+ my $createdate = $params{createdate} || '';
my $recurse = $params{'recurse'} || '';
my $finalTerm = $inline ? ( $params{nofinalnewline} || 0 ) : 0;
@@ -665,15 +666,35 @@
}
}
- if( $date ){
+ if( $date || $createdate ) {
use TWiki::Time;
- my @ends = &TWiki::Time::parseInterval( $date );
+ my @ends = ();
my @resultList = ();
- foreach my $topic ( @topicList ) {
- # if date falls out of interval: exclude topic from result
- my $topicdate = $store->getTopicLatestRevTime( $web, $topic );
- push( @resultList, $topic )
- unless ( $topicdate < $ends[0] || $topicdate > $ends[1] );
+
+ # Design Decision: although the inner foreach loop is mostly common for
+ # date and createdate, we do not share it because deciding if we look
+ # for createdate or last modifieddate in each loop is more expensive
+ # and weights more than 3-4 lines of code duplication.
+ # If given both params (date and createdate) we prefer createdate.
+ if( $createdate ) {
+ # the createdate = date of the first revision
+ @ends = &TWiki::Time::parseInterval( $createdate );
+ foreach my $topic ( @topicList ) {
+ # if date falls out of interval: exclude topic from result
+ my $r1info = {};
+ my $topicdate = $this->_getRev1Info( $web, $topic, 'unformatteddate', $r1info );
+ push( @resultList, $topic )
+ unless ( $topicdate < $ends[0] || $topicdate > $ends[1] );
+ }
+ } else {
+ # the date = date of the last (actual) revision
+ @ends = &TWiki::Time::parseInterval( $date );
+ foreach my $topic ( @topicList ) {
+ # if date falls out of interval: exclude topic from result
+ my $topicdate = $store->getTopicLatestRevTime( $web, $topic );
+ push( @resultList, $topic )
+ unless ( $topicdate < $ends[0] || $topicdate > $ends[1] );
+ }
}
@topicList = @resultList;
}
@@ -1078,7 +1099,8 @@
# Returns the topic revision info of the base version,
# attributes are 'date', 'username', 'wikiname',
-# 'wikiusername'. Revision info is cached in the search
+# 'wikiusername' and 'unformatteddate'.
+# Revision info is cached in the search
# object for speed.
sub _getRev1Info {
my( $this, $web, $topic, $attr, $info ) = @_;
@@ -1104,6 +1126,9 @@
if( $attr eq 'date' ) {
return TWiki::Time::formatTime( $info->{date} );
}
+ if( $attr eq 'unformatteddate' ) {
+ return $info->{date};
+ }
return 1;
}
thanks tobias! i've applied this patch to the DEVELOP branch. please let me know when the docs are updated and we can mark this as "Waiting for Release" (for 4.1) some unit tests (
http://develop.twiki.org/svn/twiki/branches/DEVELOP/test/unit/
) would be nice, too
WN
Ok, I added the specific entry to
TWiki:TWiki.VarSEARCH
.
Off topic: While doing this, I recognized, that
TWiki:TWiki.TWikiVariables
looked somewhat older than
TWiki:TWiki04.TWikiVariables
. Indeed, even the
date
option was missing for SEARCH as that page included the older
TWikiSearch
page instead of the newer
VarSEARCH
page. Do I missunderstand something or is this a know problem/bug?
--
TWiki:Main.TobiasRoeser
- 22 Apr 2006
if you're referring to the docs on twiki.org, the TWiki web is for the version of twiki that's installed on twiki.org (currently still cairo). best to modify your local version and submit a patch that i can check into svn.
thanks for working on this! it
is a welcome addition
WN
Ok, here is the (simple) patch:
--- data/TWiki/VarSEARCH.txt.orig 2006-04-22 22:34:29.000000000 +0200
+++ data/TWiki/VarSEARCH.txt 2006-04-22 22:47:17.000000000 +0200
@@ -17,6 +17,7 @@
| =order="topic"= <br /> =order="created"= <br /> =order="modified"= <br /> =order="editby"= <br /> =order=<br /> "formfield(name)"= | Sort the results of search by the topic names, topic creation time, last modified time, last editor, or named field of TWikiForms. The sorting is done web by web; if you want to sort across webs, create a [[FormattedSearch][formatted]] table and sort it with TablePlugin's initsort. Note that dates are sorted most recent date *last* (i.e at the bottom of the table). | Sort by topic name |
| =limit="all"= <br /> =limit="16"= | Limit the number of results returned. This is done after sorting if =order= is specified | All results |
| =date="..."= | limits the results to those pages with latest edit time in the given TimeInterval. | All results |
+ | =createdate="..."= | Limits the results to those pages with latest create time (time of the first page revision) in the given TimeInterval. If this option *and* the =date= option are used, the =date= option will be ignored. | All results |
| =reverse="on"= | Reverse the direction of the search | Ascending search |
| =casesensitive="on"= | Case sensitive search | Ignore case |
| =bookview="on"= | BookView search, e.g. show complete topic text | Show topic summary |
I reverted my changed to
TWiki:TWiki
web, too.
--
TWiki:Main.TobiasRoeser
- 22 Apr 2006
4.1.0 released
KJL