Browse Source

Fix search using user queries (#5669)

fix https://github.com/FreshRSS/FreshRSS/issues/5668
Alexandre Alapetite 2 years ago
parent
commit
89a3d36c3e
3 changed files with 9 additions and 21 deletions
  1. 5 1
      app/Models/BooleanSearch.php
  2. 4 4
      app/Models/UserQuery.php
  3. 0 16
      tests/app/Models/UserQueryTest.php

+ 5 - 1
app/Models/BooleanSearch.php

@@ -90,10 +90,14 @@ class FreshRSS_BooleanSearch {
 		}
 
 		if (!empty($all_matches)) {
+			$category_dao = FreshRSS_Factory::createCategoryDao();
+			$feed_dao = FreshRSS_Factory::createFeedDao();
+			$tag_dao = FreshRSS_Factory::createTagDao();
+
 			/** @var array<string,FreshRSS_UserQuery> */
 			$queries = [];
 			foreach (FreshRSS_Context::$user_conf->queries as $raw_query) {
-				$query = new FreshRSS_UserQuery($raw_query);
+				$query = new FreshRSS_UserQuery($raw_query, $feed_dao, $category_dao, $tag_dao);
 				$queries[] = $query;
 			}
 

+ 4 - 4
app/Models/UserQuery.php

@@ -125,7 +125,7 @@ class FreshRSS_UserQuery {
 	 */
 	private function parseCategory(int $id): void {
 		if ($this->category_dao === null) {
-			throw new FreshRSS_DAO_Exception('Category DAO is not loaded in UserQuery');
+			$this->category_dao = FreshRSS_Factory::createCategoryDao();
 		}
 		$category = $this->category_dao->searchById($id);
 		if ($category !== null) {
@@ -143,7 +143,7 @@ class FreshRSS_UserQuery {
 	 */
 	private function parseFeed(int $id): void {
 		if ($this->feed_dao === null) {
-			throw new FreshRSS_DAO_Exception('Feed DAO is not loaded in UserQuery');
+			$this->feed_dao = FreshRSS_Factory::createFeedDao();
 		}
 		$feed = $this->feed_dao->searchById($id);
 		if ($feed !== null) {
@@ -160,8 +160,8 @@ class FreshRSS_UserQuery {
 	 * @throws FreshRSS_DAO_Exception
 	 */
 	private function parseTag(int $id): void {
-		if ($this->tag_dao == null) {
-			throw new FreshRSS_DAO_Exception('Tag DAO is not loaded in UserQuery');
+		if ($this->tag_dao === null) {
+			$this->tag_dao = FreshRSS_Factory::createTagDao();
 		}
 		$tag = $this->tag_dao->searchById($id);
 		if ($tag !== null) {

+ 0 - 16
tests/app/Models/UserQueryTest.php

@@ -19,14 +19,6 @@ class UserQueryTest extends PHPUnit\Framework\TestCase {
 		self::assertEquals('favorite', $user_query->getGetType());
 	}
 
-	public function test__construct_whenCategoryQueryAndNoDao_throwsException(): void {
-		$this->expectException(FreshRSS_DAO_Exception::class);
-		$this->expectExceptionMessage('Category DAO is not loaded in UserQuery');
-
-		$query = array('get' => 'c_1');
-		new FreshRSS_UserQuery($query);
-	}
-
 	public function test__construct_whenCategoryQuery_storesCategoryParameters(): void {
 		$category_name = 'some category name';
 		/** @var FreshRSS_Category&PHPUnit\Framework\MockObject\MockObject */
@@ -47,14 +39,6 @@ class UserQueryTest extends PHPUnit\Framework\TestCase {
 		self::assertEquals('category', $user_query->getGetType());
 	}
 
-	public function test__construct_whenFeedQueryAndNoDao_throwsException(): void {
-		$this->expectException(FreshRSS_DAO_Exception::class);
-		$this->expectExceptionMessage('Feed DAO is not loaded in UserQuery');
-
-		$query = array('get' => 'f_1');
-		new FreshRSS_UserQuery($query);
-	}
-
 	public function test__construct_whenFeedQuery_storesFeedParameters(): void {
 		$feed_name = 'some feed name';
 		/** @var FreshRSS_Feed&PHPUnit\Framework\MockObject\MockObject */