diff --git a/TODO b/TODO index c8c5fb79..76825abe 100644 --- a/TODO +++ b/TODO @@ -7,7 +7,6 @@ everything related to posts: - comment count - regard safety settings - regard disliked settings - - add search form (query, order and safety) to post list presenter - add warning if no posts were found - search filters - comment:rr- diff --git a/src/SearchServices/Parsers/AbstractSearchParser.php b/src/SearchServices/Parsers/AbstractSearchParser.php index 78e1777c..6d2708e7 100644 --- a/src/SearchServices/Parsers/AbstractSearchParser.php +++ b/src/SearchServices/Parsers/AbstractSearchParser.php @@ -22,7 +22,12 @@ abstract class AbstractSearchParser foreach ($tokens as $token) { if ($token instanceof \Szurubooru\SearchServices\Tokens\NamedSearchToken) - $this->decorateFilterFromNamedToken($filter, $token); + { + if ($token->getKey() === 'order') + $filter->setOrder(array_merge($filter->getOrder(), $this->getOrder($token->getValue()))); + else + $this->decorateFilterFromNamedToken($filter, $token); + } elseif ($token instanceof \Szurubooru\SearchServices\Tokens\SearchToken) $this->decorateFilterFromToken($filter, $token); else diff --git a/tests/SearchServices/UserSearchParserTest.php b/tests/SearchServices/UserSearchParserTest.php index 59b7b127..950117ee 100644 --- a/tests/SearchServices/UserSearchParserTest.php +++ b/tests/SearchServices/UserSearchParserTest.php @@ -30,4 +30,22 @@ class UserSearchParserTest extends AbstractTestCase $filter = $this->userSearchParser->createFilterFromInputReader($this->inputReader); $this->assertEquals([UserFilter::ORDER_NAME => UserFilter::ORDER_DESC], $filter->getOrder()); } + + public function testTokenOrder() + { + $this->inputReader->query = 'order:name,desc'; + $filter = $this->userSearchParser->createFilterFromInputReader($this->inputReader); + $this->assertEquals([UserFilter::ORDER_NAME => UserFilter::ORDER_DESC], $filter->getOrder()); + } + + public function testParamAndTokenOrder() + { + $this->inputReader->order = 'registration_time,desc'; + $this->inputReader->query = 'order:name,desc'; + $filter = $this->userSearchParser->createFilterFromInputReader($this->inputReader); + $this->assertEquals([ + UserFilter::ORDER_REGISTRATION_TIME => UserFilter::ORDER_DESC, + UserFilter::ORDER_NAME => UserFilter::ORDER_DESC], + $filter->getOrder()); + } }