From 96195f0efc48c7cdc8efab040a98808273cfccb0 Mon Sep 17 00:00:00 2001 From: rr- Date: Tue, 24 Nov 2015 21:56:07 +0100 Subject: [PATCH] Added ability to search tags by creation/edit time --- src/Search/Filters/TagFilter.php | 2 ++ src/Search/Parsers/TagSearchParser.php | 31 +++++++++++++++++++------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/Search/Filters/TagFilter.php b/src/Search/Filters/TagFilter.php index 52ab98c1..4fee563a 100644 --- a/src/Search/Filters/TagFilter.php +++ b/src/Search/Filters/TagFilter.php @@ -10,6 +10,8 @@ class TagFilter extends BasicFilter implements IFilter const ORDER_USAGE_COUNT = 'usages'; const REQUIREMENT_PARTIAL_TAG_NAME = 'partialTagName'; + const REQUIREMENT_CREATION_TIME = 'creationTime'; + const REQUIREMENT_LAST_EDIT_TIME = 'lastEditTime'; const REQUIREMENT_CATEGORY = 'category'; public function __construct() diff --git a/src/Search/Parsers/TagSearchParser.php b/src/Search/Parsers/TagSearchParser.php index 5405b6d4..3e77c204 100644 --- a/src/Search/Parsers/TagSearchParser.php +++ b/src/Search/Parsers/TagSearchParser.php @@ -24,18 +24,33 @@ class TagSearchParser extends AbstractSearchParser $filter->addRequirement($requirement); } - protected function decorateFilterFromNamedToken(IFilter $filter, NamedSearchToken $namedToken) + protected function decorateFilterFromNamedToken(IFilter $filter, NamedSearchToken $token) { - if ($this->matches($namedToken->getKey(), ['category'])) + if ($this->matches($token->getKey(), ['creation_time', 'creation_date', 'date'])) { - return $this->addRequirementFromToken( - $filter, - $namedToken, - TagFilter::REQUIREMENT_CATEGORY, - self::ALLOW_COMPOSITE); + $this->addRequirementFromDateRangeToken( + $filter, $token, TagFilter::REQUIREMENT_CREATION_TIME); + return; } - throw new NotSupportedException('Unknown token: ' . $namedToken->getKey()); + if ($this->matches($token->getKey(), ['edit_time', 'edit_date'])) + { + $this->addRequirementFromDateRangeToken( + $filter, $token, TagFilter::REQUIREMENT_LAST_EDIT_TIME); + return; + } + + if ($this->matches($token->getKey(), ['category'])) + { + $this->addRequirementFromToken( + $filter, + $token, + TagFilter::REQUIREMENT_CATEGORY, + self::ALLOW_COMPOSITE); + return; + } + + throw new NotSupportedException('Unknown token: ' . $token->getKey()); } protected function getOrderColumnMap()